【问题标题】:Add element at specific position in XML-file C#在 XML 文件 C# 中的特定位置添加元素
【发布时间】:2015-09-14 08:21:35
【问题描述】:

我有以下 XML 文件:

<?xml-stylesheet type="text/xsl" href="transform.xslt"?>
<Root>
 <Notes>
    <Note>
    <date>1997-07-04T00:00:00</date>
    </Note>
    <Note>
      <date>1997-07-04T00:00:00</date>
    </Note>
</Notes>
</Root>

不,我想像下面的代码一样向这个 XML 添加元素:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="transform.xslt"?>
<Root>
 <Notes>
    <notedate date="date here"><Note>
    <date>1997-07-04T00:00:00</date>
    </Note></notedate>
    <notedate date="date here"><Note>
      <date>1997-07-04T00:00:00</date>
    </Note></notedate>
</Notes>
</Root>

如您所见,我想将&lt;Note&gt; 封装在一个&lt;notedate&gt; 元素中。

如何在 C# 中指定向 XML 文件添加新元素(包括开始标签和结束标签)的位置?

我正在使用 XDocument。

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    试试这样,每个 Note 元素都被替换:

    var query=from n in xml.Root.Descendants("Note")
        select n;
    
    
    foreach(var elem in query.ToList())
        elem.ReplaceWith(new XElement("notedate", new XAttribute("date", "date here"), elem));
    

    【讨论】:

    • 我知道。但我想指定将这个元素放在我的 XML 中的位置。如您所见,我希望我的新元素在 之前,在 之后有一个结束标签
    • 查看更新答案。我用一个新的 noteate 元素替换每个 note 元素,并附上旧的。我希望它有所帮助。
    【解决方案2】:

    您实际上想用另一个元素包装每个 Note 元素,一种选择是使用 ReplaceWith

    var noteElements = doc.Root.Descendants("Note").ToList();
    
    foreach(XElement noteEl in noteElements)
    {
        string noteDateValue = noteEl.Element("date").Value;
        noteEl.ReplaceWith(new XElement("notedate", noteEl, new XAttribute("date", noteDateValue)));
    }
    // your doc is now updated
    

    【讨论】:

      【解决方案3】:

      这里演示了简单的案例:link

      这里是sn-p的代码:

      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
                  "<title>Pride And Prejudice</title>" +
                  "</book>");
      
      XmlNode root = doc.DocumentElement;
      
      //Create a new node.
      XmlElement elem = doc.CreateElement("price");
      elem.InnerText="19.95";
      
      //Add the node to the document.
      root.AppendChild(elem);
      
      Console.WriteLine("Display the modified XML...");
      doc.Save(Console.Out);
      

      【讨论】:

      • 我刚刚学习了XDocument,所以我想用XDocument来做这个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多