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