XDocument.Descendants()与DescendantNodes()的区别

30

我看了一下Nodes() vs DescendantNodes() usages?以了解.Nodes().DescendantNodes()之间的区别,但是和之间有什么区别呢?

var xmlDoc = XDocument.Load(@"c:\Projects\Fun\LINQ\LINQ\App.config");        
var descendants = xmlDoc.Descendants();
var descendantNodes = xmlDoc.DescendantNodes();

foreach (var d in descendants)
    Console.WriteLine(d);

foreach (var d in descendantNodes)
    Console.WriteLine(d);
2个回答

42

Descendants仅返回elementsDescendantNodes返回所有nodes(包括XComments,XText,XDocumentType等)。

考虑以下xml以查看差异:

<root>
  <!-- comment -->
  <foo>
    <bar value="42"/>Oops!
  </foo>  
</root>

"Descendants"将返回3个元素("root","foo","bar")。"DescendantNodes"将返回这三个元素和另外两个节点 - 文本和注释。"

18

Descendants 返回所有后代 元素,而 DescendantNodes 返回所有类型的节点(元素、属性、文本节点、注释等等)。

因此,Descendants() 等同于 DescendantNodes().OfType<XElement>()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接