从XML中删除元素

时间:2015-02-04 21:05:38

标签: c# xml

我想从XML树中删除一个元素,并尝试使用以下URL中提到的方法来执行此操作。

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 个答案:

答案 0 :(得分:2)

Element方法仅返回单个元素。你想要:

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

使用:

这样就可以直接在根目录下的GrandChild1元素下找到每个Child1元素。如果您实际上不在乎 找到了GrandChild1元素,那么您可以使用

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

...但使用Elements会让您获得更多控制权。

答案 1 :(得分:0)

因为您使用的是Element方法,所以它只返回一个元素。您可以使用Descendants方法来实现您的目标:

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