XDocument.Descendants() versus DescendantNodes()

c#, linq-to-xml, xml

Solution

Descendants returns only elements. DescendantNodes returns all nodes (including XComments, XText, XDocumentType etc).

Consider following xml to see the difference:

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

`Descendants` will return 3 elements (`root`, `foo`, `bar`). `DescendantNodes` will return these three elements, and 2 other nodes - text and comment.

Problem

I've looked at Nodes() vs DescendantNodes() usages? to see the difference between `.Nodes()` and `.DescendantNodes()` but what is the difference between: XDocument.Descendants() and 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); ```

Original source

Related problems