Odpowiedzi:
Elements
znajduje tylko te elementy, które są bezpośrednimi potomkami, tj. bezpośrednie dzieci.
Descendants
znajduje dzieci na dowolnym poziomie, tj. dzieci, wnuki itp.
Oto przykład pokazujący różnicę:
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<bar>Test 1</bar>
<baz>
<bar>Test 2</bar>
</baz>
<bar>Test 3</bar>
</foo>
Kod:
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);
}
Wynik:
Elementy: Test 1 Elementy: test 3 Potomkowie: test 1 Potomkowie: test 2 Potomkowie: test 3
Jeśli wiesz, że elementy, które chcesz, są bezpośrednimi dziećmi, uzyskasz lepszą wydajność, jeśli użyjesz Elements
zamiast Descendants
.
Descendants
przeszuka całe poddrzewo bieżącego elementu pod kątem określonej nazwy (lub zwróci spłaszczoną wersję drzewa, jeśli nie zostanie podana nazwa), podczas gdy Elements
przeszukuje tylko bezpośrednie elementy potomne bieżącego elementu.