Antworten:
Elementsfindet nur die Elemente, die direkte Nachkommen sind, dh unmittelbare Kinder.
Descendants findet Kinder auf jeder Ebene, dh Kinder, Enkelkinder, etc ...
Hier ist ein Beispiel, das den Unterschied zeigt:
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<bar>Test 1</bar>
<baz>
<bar>Test 2</bar>
</baz>
<bar>Test 3</bar>
</foo>
Code:
XDocument doc = XDocument.Load("input.xml");
XElement root = doc.Root;
foreach (XElement e in root.Elements("bar"))
{
Console.WriteLine("Elements : " + e.Value);
}
foreach (XElement e in root.Descendants("bar"))
{
Console.WriteLine("Descendants : " + e.Value);
}
Ergebnis:
Elemente: Test 1 Elemente: Test 3 Nachkommen: Test 1 Nachkommen: Test 2 Nachkommen: Test 3
Wenn Sie wissen, dass die gewünschten Elemente unmittelbare untergeordnete Elemente sind, erhalten Sie eine bessere Leistung, wenn Sie Elementsstattdessen verwenden Descendants.
Descendantsdurchsucht den gesamten Teilbaum des aktuellen Elements nach dem angegebenen Namen (oder gibt eine abgeflachte Version des Baums zurück, wenn kein Name angegeben ist), während Elementsnur die unmittelbaren untergeordneten Elemente des aktuellen Elements durchsucht werden.