2012-03-24 10 views
3

Ich lese, dass Nodes() sendet alle Knoten einschließlich sub.Nodes() vs DescendantNodes() Verwendungen?

und DescendantNodes() das gleiche, aber auf rekursive Weise.

aber - ich kann nicht jede Situation finden, in denen ich die rekursive Art und Weise benötigt, ...

Wann soll ich lieber arbeiten mit DescendantNodes() über Nodes()?

heißt:

enter image description here

IEnumerable<XNode> nodes =from nd in xmlTree.DescendantNodes() 
       select nd; 
      foreach (XNode node in nodes) 
       Console.WriteLine(node); 

Ausgang:

enter image description here Frage:

Warum ich brauche es rekursiv gespaltet, wenn ich mit Knoten arbeiten können()?

Antwort

7

Nun nodes gibt Ihnen die untergeordneten Knoten des Knotens, den Sie anrufen, während gibt Ihnen die Nachkommen Knoten des Knotens Sie nennen es an.

Stellen Sie sich ein XML-Dokument haben Sie mit mehreren Verschachtelungsebenen bearbeiten möchten und Sie alle Kommentarknoten auf allen Ebenen finden, dann können Sie

XDocument doc = XDocument.Parse(@"<!-- comment 1 --> 
<root> 
<!-- comment 2 --> 
    <foo> 
    <!-- comment 3 --> 
    <bar><!-- comment 4 --></bar> 
    </foo> 
</root> 
<!-- comment 5 -->"); 

    foreach (XComment comment in doc.DescendantNodes().OfType<XComment>()) 
    { 
     Console.WriteLine(comment.Value); 
    } 

tun Wenn Sie die Nodes Methode nur verwendet, um Sie müsste eine rekursive Methode schreiben, um alle Kommentarknoten zu finden.