我查看了Nodes() vs DescendantNodes() usages?,看看.Nodes()
和.DescendantNodes()
之间的区别,但有什么区别:
XDocument.Descendants()和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);
答案 0 :(得分:29)
Descendants仅返回elements。 DescendantNodes返回所有nodes(包括XComments,XText,XDocumentType等)。
请考虑使用xml来查看差异:
<root>
<!-- comment -->
<foo>
<bar value="42"/>Oops!
</foo>
</root>
Descendants
将返回3个元素(root
,foo
,bar
)。 DescendantNodes
将返回这三个元素,以及其他2个节点 - 文本和注释。
答案 1 :(得分:13)
Descendants
仅返回后代元素,而DescendantNodes
返回所有类型的节点(元素,属性,文本节点,注释等)
因此Descendants()
相当于DescendantNodes().OfType<XElement>()
。