2010-09-13 10 views

Respuesta

249

Elements encuentra solo los elementos que son descendientes directos, es decir, hijos inmediatos.

Descendants encuentran los niños en cualquier nivel, es decir, niños, nietos, etc. ...


Aquí es 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:

 
Elements : Test 1 
Elements : Test 3 
Descendants : Test 1 
Descendants : Test 2 
Descendants : Test 3 

Si sabe que los elementos que desea son hijos inmediatos, obtendrá un mejor rendimiento si utiliza Elements en lugar de Descendants.

+0

Gran respuesta, siempre pensé que los dos estaban un poco al revés como se destaca en su descripción (al describir Elementos, siempre debe usar la palabra "descendiente", ya que es un poco más opcional cuando se habla de descendientes – Mattisdada

14

Descendants buscará el subárbol completo del elemento actual para el nombre especificado (o devolverá una versión aplanada del árbol si no se proporciona ningún nombre), mientras que Elements busca solo los elementos secundarios inmediatos del elemento actual.

Cuestiones relacionadas