XDocument.Descendants() versus DescendantNodes()
本文关键字:DescendantNodes versus Descendants XDocument | 更新日期: 2023-09-27 18:04:52
我看过Nodes() vs DescendantNodes()用法?看看.Nodes()
和.DescendantNodes()
之间的区别,但它们之间的区别是:
XDocument.Descendants()和XDocument.Descendants() ?
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只返回元素。后代节点返回所有节点(包括XComments, XText, XDocumentType等)。
考虑遵循xml来查看差异:
<root>
<!-- comment -->
<foo>
<bar value="42"/>Oops!
</foo>
</root>
Descendants
将返回3个元素(root
, foo
, bar
)。DescendantNodes
将返回这三个元素,以及另外两个节点——文本和注释。
Descendants
只返回后代元素,而DescendantNodes
返回所有类型的节点(元素、属性、文本节点、注释等)
所以Descendants()
等价于DescendantNodes().OfType<XElement>()