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