2017-06-06 51 views
0

我想在我的XML中添加第3级grand子部分。如何在xml子元素部分添加grand子元素C#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"); 
+0

如何这个问题关系到你的C#的标签?到目前为止你到底做了什么,失败的是什么? –

+0

感谢您的快速响应。我补充一点。 –

回答

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") 
       }) 
      })); 
     } 
    } 
} 
+0

谢谢你,我为它工作 –

1

下面的示例代码应该展示如何在节点在给定的位置

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 

下面添加到现有的XML是file.xml内容和out.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是一种丰富的语言,因此如果需要,您可以进一步微调。

+0

@Vikharm感谢您的快速回复。但似乎有错误对象引用未设置为代码的对象实例 –

+0

@JiangJiali此代码演示如何解决您的问题。你是否有一个名为'file.xml'的示例文件,其内容是我从命令'type file.xml'中显示的内容?在你更新的代码中,你已经使用了'fileOfReportInXML'作为包含文件名称的变量 – Vikhram

+0

谢谢,我为它工作了 –