XDocument.Descendants() versus DescendantNodes()

本文关键字:DescendantNodes versus Descendants XDocument | 更新日期: 2023-09-27 18:04:52

我看过Nodes() vs DescendantNodes()用法?看看.Nodes().DescendantNodes()之间的区别,但它们之间的区别是:

XDocument.Descendants()和XDocument.Descendants() ?

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);

XDocument.Descendants() versus DescendantNodes()

Descendants只返回元素。后代节点返回所有节点(包括XComments, XText, XDocumentType等)。

考虑遵循xml来查看差异:

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

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

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

所以Descendants()等价于DescendantNodes().OfType<XElement>()