2014-05-24 107 views
19

我看Nodes() vs DescendantNodes() usages?看到.Nodes().DescendantNodes()但之間有什麼區別的區別:XDocument.Descendants()與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); 

回答

26

Descendants只返回elementsDescendantNodes返回全部nodes(包括XComments,XText,XDocumentType等)。

考慮下面的XML看出差別:

<root> 
    <!-- comment --> 
    <foo> 
    <bar value="42"/>Oops! 
    </foo> 
</root> 

Descendants將返回3個元素(rootfoobar)。 DescendantNodes將返回這三個元素,以及2個其他節點 - 文本和評論。

11

Descendants只返回後代元素,而DescendantNodes返回所有類型的節點(元素,屬性,文本節點,註釋等)的

所以Descendants()相當於DescendantNodes().OfType<XElement>()

相關問題