2017-06-06 94 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

謝謝,我爲它工作了 –