如何修改混合内容的xml节点

时间:2012-03-08 10:14:51

标签: c# xml

我修改了“duyurular.xml”,但节点<baslik>非标准且包含值。 如何更改节点<baslik>值。

“duyurular.xml”文件结构:

   <?xml version="1.0" encoding="utf-8"?>
    <duyurular>
      <duyuru>
        <baslik>Okul Müdürlüğü<kurum>Eğitim-Öğretim</kurum><tarih>11.11.2011-17:17</tarih><url>http://www.example.com/XmlDuyuru.aspx?duyurudetayId=2012581131705</url><duyurudetay>Detay bilgileri One</duyurudetay><id>2012581131705</id></baslik>
        <baslik>AB Eğitim ve Gençlik <kurum>ARGE</kurum><tarih>11.11.2011-17:17</tarih><url>http://www.example.com/XmlDuyuru.aspx?duyurudetayId=2012581131701</url><duyurudetay>Detay bilgileri Two</duyurudetay><id>2012581131701</id></baslik>
      </duyuru>
    </duyurular>

C#代码背后:

    void xmDuzelt(string idim)
    {
        string dosyaadi = Server.MapPath("~/xml/") + "duyurular.xml";
        XDocument doc = XDocument.Load(dosyaadi);

        var q = from duzey1 in doc.Descendants("duyuru")
                let elemnt = duzey1.Element("baslik").Element("id")                    
                where elemnt != null && elemnt.Value == idim
                select duzey1;

        foreach (var item in q)
                {
                    item.Element("baslik").Element("kurum").Value = this.txtKurum.Text;
                    item.Element("baslik").Element("duyurudetay").Value = this.txtduyurudetay.Value;                    
                }       
        doc.Save(dosyaadi);
        Response.Redirect(Request.Url.ToString());
    }

2 个答案:

答案 0 :(得分:0)

照常修改元素和属性。

Baslik元素的文字通过下一种方式修改:

如果baslik元素中的文本计数总是一个:

    var baslik = item.Element("baslik");

    var text = baslik.Nodes().OfType<XText>().First();
    text.Value = new_baslik_text;

如果为零或一:

    var text = baslik.Nodes().OfType<XText>().FirstOrDefault();
    if (text != null)
      text.Value = new_baslik_text;
    else
      baslik.AddFirst(new XText(new_baslik_text));

如果为零或多:

    foreach (var text in baslik.Nodes().OfType<XText>().ToArray())
      text.Remove();
    baslik.AddFirst(new XText(new_baslik_text));       

答案 1 :(得分:0)

如果你想保留子元素,你可以这样做:

var baslik = item.Element("baslik");
var children = baslik.Elements().ToArray();
baslik.Value = "new value"; // removes any children
foreach (XElement child in children) // re-add child elements
    baslik.Add(child);