Respuestas:
Elements
encuentra solo aquellos elementos que son descendientes directos , es decir, hijos inmediatos.
Descendants
encuentra niños en cualquier nivel, es decir, hijos, nietos, etc.
Aquí hay un ejemplo que demuestra la diferencia:
<?xml version="1.0" encoding="utf-8" ?>
<foo>
<bar>Test 1</bar>
<baz>
<bar>Test 2</bar>
</baz>
<bar>Test 3</bar>
</foo>
Código:
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);
}
Resultado:
Elementos: Prueba 1 Elementos: Prueba 3 Descendientes: Prueba 1 Descendientes: Prueba 2 Descendientes: Prueba 3
Si sabe que los elementos que desea son elementos secundarios inmediatos, obtendrá un mejor rendimiento si lo utiliza en Elements
lugar de hacerlo Descendants
.
Descendants
buscará en el subárbol completo del elemento actual el nombre especificado (o devolverá una versión aplanada del árbol si no se proporciona ningún nombre), mientras que Elements
solo buscará los elementos secundarios inmediatos del elemento actual.