web-dev-qa-db-ja.com

XDocument.Descendants()とDescendantNodes()

Nodes()とDescendantNodes()の使用法? を見て、.Nodes().DescendantNodes()の違いを確認しましたが、次の違いは何ですか。

XDocument.Descendants()およびXDocument.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);
23
Rob P.

子孫要素 のみを返します。 DescendantNodes すべてを返します nodes (XComments、XText、XDocumentTypeなどを含む)。

違いを確認するには、次のxmlを検討してください。

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

Descendantsは3つの要素(rootfoobar)を返します。 DescendantNodesは、これら3つの要素と、他の2つのノード(テキストとコメント)を返します。

30

Descendantsは子孫のみを返しますelementsDescendantNodesはすべてのタイプのノード(要素、属性、テキストノード、コメントなど)を返します

したがって、Descendants()DescendantNodes().OfType<XElement>()と同等です。

14
Thomas Levesque