Risposte:
Elementstrova solo quegli elementi che sono discendenti diretti , cioè figli immediati.
Descendants trova bambini a qualsiasi livello, ad esempio bambini, nipoti, ecc.
Ecco un esempio che dimostra la differenza:
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<bar>Test 1</bar>
<baz>
<bar>Test 2</bar>
</baz>
<bar>Test 3</bar>
</foo>
Codice:
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);
}
Risultato:
Elementi: test 1 Elementi: test 3 Discendenti: Test 1 Discendenti: Test 2 Discendenti: Test 3
Se sai che gli elementi che desideri sono figli immediati, otterrai prestazioni migliori se lo usi Elementsinvece di Descendants.
Descendantscercherà l'intero sottotree dell'elemento corrente per il nome specificato (o restituirà una versione appiattita dell'albero se non viene fornito alcun nome), mentre Elementscerca solo i figli immediati dell'elemento corrente.