使用 LINQ 在 xml 文档中查找节点,其中不同级别的节点具有相同的名称

本文关键字:节点 xml LINQ 文档 查找 使用 | 更新日期: 2023-09-27 18:20:37

<category>
   <category>
       <category>
       </category>
   </category>
</category>
<category>
   <category>
       <category>
       </category>
   </category>
</category>

我有一个如上所述的xml段,其中许多子节点与父节点具有相同的名称,重复多个级别。使用 LINQ to XML 我想查询1(只有顶级节点和2(所有二级节点及其后代。通常我可以使用.后代("类别"(或 .Element(( 如果节点名称是唯一的,但我找不到任何在 XML 层次结构中指定级别/深度的方法。

使用 LINQ 在 xml 文档中查找节点,其中不同级别的节点具有相同的名称

1(只是顶级节点

Elements方法仅采用直接位于当前节点下的元素,因此使用它来获取category元素的顶级:

var topCategories = source.Elements("category");

2(所有二级节点及其后代

结合ElementsDescendants来获得它:

var topCategories = source.Elements("category").Descendants("category");

在这两个示例中,source 是作为category部分父级的XElement。 例如 categories在以下文档中:

<root>
    <elements>
        <element />
        <element />
    </elements>
    <categories>
        <category>
            <category>
                <category>
                    <category />
                </category>
            </category>
        </category>
        <category>
            <category>
                <category />
            </category>
        </category>
    </categories>
</root>