Risposte:
Elements
trova 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 Elements
invece di Descendants
.
Descendants
cercherà l'intero sottotree dell'elemento corrente per il nome specificato (o restituirà una versione appiattita dell'albero se non viene fornito alcun nome), mentre Elements
cerca solo i figli immediati dell'elemento corrente.