这是我的XML的样子(是的,我知道XML很难看)。我正在尝试搜索并删除此XDocument中isConstField属性设置为“Y”的所有节点,而不迭代每个单独的XElement。
<Root>
<Node>
<SubNode>
<SubNode2>
<FieldNameA isConstField="Y"></FieldNameA>
<FieldNameB></FieldNameB>
<FieldNameC isConstField="N"></FieldNameC>
</SubNode2>
</SubNode>
<SubNode>
<SubNode2>
<FieldNameD></FieldNameD>
<FieldNameE></FieldNameE>
<FieldNameF></FieldNameF>
</SubNode2>
</SubNode>
</Node>
</Root>
以下是我试图做的事情
XDocument doc = XDocument.Load(@"d:\junk\Test\Test\Data.xml");
doc.Descendants("Root").Elements().Where(x => (string)x.Attribute("isConstField") == "Y").Remove();
答案 0 :(得分:1)
.Elements()
只会返回直接的子元素
你想要.Descendants()
,它返回所有嵌套元素。
答案 1 :(得分:0)
您可以使用XPath扩展(不要忘记添加System.Xml.XPath
命名空间引用):
doc.XPathSelectElements("//*[@isConstField='Y']").Remove();
表达式匹配isConstField
属性等于Y
的任何节点。 XPathSelectElements
选择所有此类节点。然后删除所有选定的节点。