Nodes()vs DescendantNodes()用法?

时间:2012-03-24 09:52:02

标签: c#-4.0 .net-4.0 linq-to-xml

我读到Nodes()会发出包括sub。

在内的所有节点

DescendantNodes()相同,但是以递归的方式。

然而 - 我无法找到任何需要递归方式的情况......

我应该何时更喜欢使用DescendantNodes()而不是Nodes()?

即:

enter image description here

 IEnumerable<XNode> nodes =from nd in xmlTree.DescendantNodes()
                select nd;
            foreach (XNode node in nodes)
                Console.WriteLine(node);

输出:

enter image description here 问题:

为什么我需要递归拆分,当我可以使用Nodes()?

1 个答案:

答案 0 :(得分:7)

nodes为您提供您调用它的节点的子节点,而descendantnodes为您提供您调用它的节点的后代节点。

想象一下,您有一个XML文档要处理多个嵌套级别,并且您希望在所有级别找到所有注释节点,然后就可以了

XDocument doc = XDocument.Parse(@"<!-- comment 1 -->
<root>
<!-- comment 2 -->
  <foo>
    <!-- comment 3 -->
    <bar><!-- comment 4 --></bar>
  </foo>
</root>
<!-- comment 5 -->");

    foreach (XComment comment in doc.DescendantNodes().OfType<XComment>())
    {
        Console.WriteLine(comment.Value);
    }

如果您只使用Nodes方法,则需要编写递归方法来查找所有注释节点。