2012-08-24 53 views
1

我想從模板中複製一些xml節點,將它們放在另一個xml中。 XML的結構如下。xml節點父ID#

<grandparent> 
    <parent> 
     <children> 
      <grandchildren/> 
     </children> 
     <children> 
      <grandchildren/> 
     </children> 
     <children> 
      <grandchildren/> 
     </children> 
    </parent> 
    <parent> 
     <children> 
      <grandchildren/> 
      <grandchildren/> 
      <grandchildren/> 
     </children> 
     <children> 
      <grandchildren/> 
      <grandchildren/> 
      <grandchildren/> 
     </children> 
     <children> 
      <grandchildren/> 
      <grandchildren/> 
      <grandchildren/> 
     </children> 
    </parent> 
</grandparent> 

是否有可能對我來說,tranverse下來第二個家長和孩子選擇和抓住所有的孫子?和所有的孫子插入到另一個XML文件?

+0

哪裏父ID進入呢? – Rawling

+0

答案是肯定的,但是您需要提供示例代碼,瞭解您如何處理XML,以便有人提供更詳細的答案。 –

+0

@ Rawling,有趣的問題......它看起來像人們今天隨機文本輸入標題... –

回答

2

你可以這樣說:

 string input = @"<grandparent> 
      <parent> 
       <children> 
        <grandchildren/> 
       </children> 
       <children> 
        <grandchildren/> 
       </children> 
       <children> 
        <grandchildren/> 
       </children> 
      </parent> 
      <parent> 
       <children> 
        <grandchildren id=""1""/> 
        <grandchildren id=""2""/> 
        <grandchildren id=""3""/> 
       </children> 
       <children> 
        <grandchildren id=""4""/> 
        <grandchildren id=""5""/> 
        <grandchildren id=""6""/> 
       </children> 
       <children> 
        <grandchildren id=""7""/> 
        <grandchildren id=""8""/> 
        <grandchildren id=""9""/> 
       </children> 
      </parent> 
     </grandparent>"; 

     XDocument doc = XDocument.Parse(input); 
     // Use XDocument.Load method to load XML content from file 
     //XDocument doc = XDocument.Load(<filepath>); 

     IEnumerable<XElement> elements = doc 
      .Root 
      .Elements("parent") 
      .ElementAt(1) 
      .Descendants("grandchildren"); 

     XElement rootElement = new XElement("rootElement"); 
     rootElement.Add(elements); 

     rootElement.Save(@"C:\Doc2.xml"); 

我假定您發佈的XML不只是要解析一個片段,而是整個XML的內容。 這裏最棘手的部分是你通過它的序號訪問元素,它應該由parent元素上的某種ID屬性完成,因此可以通過比較它的ID而不是使用ElementAt方法來訪問它,該方法根據這是序位。 我將id屬性添加到grandchildren,因此可以看到grandchildren元素屬於第二個parent元素,而不是第一個元素。

0
XElement doc = XElement.Load("c:\\yourXML.xml"); 
XElement newdoc = new XElement("GrandChildren"); 
foreach (XElement x in doc.Descendants("parent").Skip(1).Descendants("children").Descendants("grandchildren")) 
{ 
     newdoc.Add(x); 
} 

newDoc現在包含您所需的XML ..