【问题标题】:How to modify xml node with mixed content如何修改具有混合内容的xml节点
【发布时间】:2012-03-08 10:14:51
【问题描述】:

我已修改“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());
    }

【问题讨论】:

  • 我希望修改后的标题能描述你的实际问题。

标签: c# xml


【解决方案1】:

元素和属性照常修改。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2018-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多