2014-05-24 10 views
19

Ho guardato Nodes() vs DescendantNodes() usages? per vedere la differenza tra .Nodes() e .DescendantNodes() ma qual è la differenza tra:XDocument.Descendants() contro DescendantNodes()

XDocument.Descendants() e 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); 

risposta

26

Descendants restituisce solo elements. DescendantNodes restituisce tutti gli nodes (inclusi XComments, XText, XDocumentType ecc.).

consideri seguente codice XML per vedere la differenza:

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

Descendants torneranno 3 elementi (root, foo, bar). DescendantNodes restituirà questi tre elementi e altri 2 nodi: testo e commento.

11

Descendants rendimenti discendente solo elementi, mentre DescendantNodes restituisce tutti i tipi di nodi (elementi, attributi, nodi di testo, commenti, ecc)

Così Descendants() equivale a DescendantNodes().OfType<XElement>().