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

时间:2013-06-04 13:59:30

标签: c# linq xelement xattribute

这是我的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();

2 个答案:

答案 0 :(得分:1)

.Elements()只会返回直接的子元素 你想要.Descendants(),它返回所有嵌套元素。

答案 1 :(得分:0)

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

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

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