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

本文关键字:xml 节点 混合 何修改 修改 | 更新日期: 2023-09-27 18:27:19

我修改了"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());
    }

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

元素和属性照常修改。

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));       

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

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);