0

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

2 回答 2

1

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

于 2013-06-04T14:02:04.083 回答
0

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

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

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

于 2013-06-04T14:05:09.363 回答