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.
Descendants returns only descendant elements, while DescendantNodes returns all types of nodes (elements, attributes, text nodes, comments, etc)
So Descendants() is equivalent to DescendantNodes().OfType<XElement>().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With