如何在xml子元素部分C#XML中添加grand子元素

时间:2017-06-06 23:13:59

标签: c# xml

我想在我的XML中添加一个三级盛大子节。

在:

<level1>
    <level2>
          <coolstuff name="name"/>
    </level2>
</level1>

后:

<level1>
    <level2>
          <stupidtags>
               <stupidtag name ="stupidname"/>
          <stupidtags>
          <coolstuff name="coolname"/>
    </level2>
</level1>

如何将stupidtags添加到C#中的level2标记中? 我实现了一点,我应该如何通过两个级别让newNode追加它,它应该在coolstuff标签之上?

XDocument doc = XDocument.Load(fileOfReportInXML);
XElement newNode= new XElement("stupidtags");

2 个答案:

答案 0 :(得分:1)

以下示例代码应演示如何将节点添加到给定位置的现有XML

var xml = new XmlDocument();
xml.Load("file.xml");               // fetch the existing XML

// create the grand child node to be inserted
var node = xml.CreateElement("level3");
node.SetAttribute("attrname", "attrvalue");
var level2Node = xml.SelectSingleNode("level1/level2"); // Use XPath to find the location of insertion

level2Node.PrependChild(node);      // Insert the Node in the grand child position

xml.Save("out.xml");                // store the new xml in a new file for demo

以下是file.xmlout.xml

的内容
D:\tmp>type file.xml 
<level1>
    <level2>
          <coolstuff name="name"/>
    </level2>
</level1>

D:\tmp>type out.xml
<level1>
  <level2>
    <level3 attrname="attrvalue" />
    <coolstuff name="name" />
  </level2>
</level1>

正如您所注意到的,XPath表达式标识了插入的位置。 XPath是一种丰富的语言,因此您可以根据需要对其进行进一步微调。

答案 1 :(得分:0)

使用xml linq(XDocument)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<level1>" +
                    "<level2>" +
                          "<coolstuff name=\"name\"/>" +
                    "</level2>" +
                "</level1>";

            XDocument doc = XDocument.Parse(xml);

            XElement level2 = doc.Descendants("level2").FirstOrDefault();

            level2.Add(new XElement("stupidtags", new object[] {
                    new XElement("stupidtag", new object[] {
                    new XAttribute("name", "stupidname")
                })
            }));
        }
    }
}