XDocument.Descendants() и DescendantNodes()
Я просмотрел Nodes() vs DescendantNodes() обычаи?, чтобы увидеть разницу между .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);
Ответы
Ответ 1
Потомки возвращают только элементы. DescendantNodes возвращает все узлы (включая XComments, XText, XDocumentType и т.д.).
Рассмотрим следующий xml, чтобы увидеть разницу:
<root>
<!-- comment -->
<foo>
<bar value="42"/>Oops!
</foo>
</root>
Descendants
вернет 3 элемента (root
, foo
, bar
). DescendantNodes
вернет эти три элемента и 2 других узла - текст и комментарий.
Ответ 2
Descendants
возвращает только элементы-потомки, а DescendantNodes
возвращает все типы узлов (элементы, атрибуты, текстовые узлы, комментарии и т.д.)
Итак, Descendants()
эквивалентно DescendantNodes().OfType<XElement>()
.