通过特定的XAttribute搜索未命名的嵌套XElement
本文关键字:未命名 嵌套 XElement 搜索 XAttribute | 更新日期: 2023-09-27 18:16:56
这是我的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();
.Elements()
将只返回直接子元素。
您需要.Descendants()
,它返回所有嵌套的元素。
您可以使用XPath扩展(不要忘记添加System.Xml.XPath
名称空间引用):
doc.XPathSelectElements("//*[@isConstField='Y']").Remove();
表达式匹配isConstField
属性等于Y
的任何节点。XPathSelectElements
选择所有这样的节点。然后删除所有选中的节点。