从XDocument中删除节点
本文关键字:节点 删除 XDocument | 更新日期: 2023-09-27 18:04:19
我在XDocument中有以下XML片段
<axes dimension="y">
<axis id="y11" scale="log" label="label1">
...
</axis>
<axis id="y12" scale="log" label="label1">
...
</axis>
</axes>
<axes dimension="x">
<axis id="x0" label="">
...
</axis>
<axis id="x1" label="">
...
</axis>
</axes>
这是在一个XDocument中,我想从它删除y12轴,并留下其余部分。因此,最终输出将是
<axes dimension="y">
<axis id="y11" scale="log" label="label1">
...
</axis>
</axes>
<axes dimension="x">
<axis id="x0" label="">
...
</axis>
<axis id="x1" label="">
...
</axis>
</axes>
如何做到这一点?
我试过了,但是行不通
xDocument
.Elements("axes")
.Where(x => (string)x.Attribute("dimension") == "y")
.Elements("axis")
.Where(x => (string)x.Attribute("id") == "y12")
.Remove();
由于您使用的是XDocument,而不是XElement,因此您应该使用Root
属性,以便使Elements
方法按预期工作并查找根元素:
用
代替xDocument.Elements("axes")...
xDocument.Root.Elements("axes")
.Where(x => (string)x.Attribute("dimension") == "y")
.Elements("axis")
.Where(x => (string)x.Attribute("id") == "y12")
.Remove();
或者,您可以直接使用Descendants
跳过Root
:
xDocument.Descendants("axes")
.Where(x => (string)x.Attribute("dimension") == "y")
.Elements("axis")
.Where(x => (string)x.Attribute("id") == "y12")
.Remove();
试试这个:
xDocument.Descendants("axis")
.Where(x => (string)x.Attribute("id") == "y12")
.Remove();