通过特定的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();

通过特定的XAttribute搜索未命名的嵌套XElement

.Elements()将只返回直接子元素。
您需要.Descendants(),它返回所有嵌套的元素。

您可以使用XPath扩展(不要忘记添加System.Xml.XPath名称空间引用):

doc.XPathSelectElements("//*[@isConstField='Y']").Remove();

表达式匹配isConstField属性等于Y的任何节点。XPathSelectElements选择所有这样的节点。然后删除所有选中的节点。