我读到Nodes
()会发出包括sub。
和DescendantNodes
()相同,但是以递归的方式。
然而 - 我无法找到任何需要递归方式的情况......
我应该何时更喜欢使用DescendantNodes
()而不是Nodes
()?
即:
IEnumerable<XNode> nodes =from nd in xmlTree.DescendantNodes()
select nd;
foreach (XNode node in nodes)
Console.WriteLine(node);
输出:
问题:
为什么我需要递归拆分,当我可以使用Nodes()?
答案 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
方法,则需要编写递归方法来查找所有注释节点。