问题
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);
回答1:
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.
回答2:
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>()
.
来源:https://stackoverflow.com/questions/23849946/xdocument-descendants-versus-descendantnodes