Antworten:
Elements
findet 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 Elements
stattdessen verwenden Descendants
.
Descendants
durchsucht 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 Elements
nur die unmittelbaren untergeordneten Elemente des aktuellen Elements durchsucht werden.