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

时间:2013-07-02 10:46:00

标签: c# xml linq-to-xml

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

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

1 个答案:

答案 0 :(得分:3)

1)只是顶级节点

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

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

2)所有第二级节点及其后代

结合ElementsDescendants来获取:

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

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

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