2015-02-04 244 views
2

我想從XML樹中刪除元素,並嘗試使用以下URL中提到的方法來執行此操作。從XML中刪除元素

https://msdn.microsoft.com/en-us/library/bb387051.aspx

我的XML從上面的有點不同,當我試圖利用這一點,只刪除Grandchild1的第一個節點。它不爲第二個做。

XElement root = XElement.Parse(@"<Root> 
    <Child1> 
     <GrandChild1/> 
     <GrandChild2/> 
     <GrandChild3/> 
    </Child1> 
    <Child1> 
     <GrandChild1/> 
     <GrandChild2/> 
     <GrandChild3/> 
    </Child1> 
</Root>"); 

root.Element("Child1").Element("GrandChild1").Remove(); 

輸出執行後:

<Child1>  
    <GrandChild2/> 
    <GrandChild3/> 
</Child1> 
<Child1> 
    <GrandChild1/> 
    <GrandChild2/> 
    <GrandChild3/> 
</Child1> 

預期輸出:

<Child1> 
     <GrandChild2/> 
     <GrandChild3/> 
    </Child1> 
    <Child1> 
     <GrandChild2/> 
     <GrandChild3/> 
    </Child1> 

爲什麼它不這樣做,我怎樣才能使它工作?

謝謝!

回答

2

Element方法只返回一個單個元素。你想:

root.Elements("Child1").Elements("GrandChild1").Remove(); 

使用:

這樣就可以找到每一個GrandChild1元素直接在根下的Child1元素下。如果你真的不關心其中GrandChild1元素被發現,你的使用

root.Descendants("GrandChild1").Remove(); 

...但使用Elements給你多一點控制。

+0

還是不能投票。有效。感謝您的澄清。 – user2697903

0

因爲您使用的是Element方法,它只是返回一個元素。你可以用Descendants的方法來達到你想要的:

root.Descendants("GrandChild1").Remove();