web-dev-qa-db-fra.com

Quelle est la différence entre les descendants et les éléments Linq to XML

J'ai rencontré ces deux mots-clés dans VS IntelliSense. J'ai essayé de googler la différence entre eux et je n'ai pas obtenu de réponse claire. Lesquels d’entre eux offrent les meilleures performances avec des fichiers XML de taille petite à moyenne. Merci

173
Luke101

Elements ne trouve que les éléments qui sont des descendants directs , c’est-à-dire des enfants immédiats.

Descendants trouve les enfants à n’importe quel niveau, c’est-à-dire les enfants, les petits-enfants, etc.


Voici un exemple démontrant la différence:

<?xml version="1.0" encoding="utf-8" ?>
<foo>
    <bar>Test 1</bar>
    <baz>
        <bar>Test 2</bar>
    </baz>
    <bar>Test 3</bar>
</foo>

Code:

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);
}

Résultat:

 Éléments: Test 1 
 Éléments: Test 3 
 Descendants: Test 1 
 Descendants: Test 2 
 Descendants: Test 3 

Si vous savez que les éléments souhaités sont des enfants immédiats, vous obtiendrez de meilleures performances si vous utilisez Elements au lieu de Descendants.

280
Mark Byers

Descendants cherchera le nom spécifié dans le sous-arbre entier de l'élément actuel (ou renverra une version aplatie de l'arbre si aucun nom n'est fourni), tandis que Elements cherche uniquement les enfants immédiats du élément actuel.

16
Adam Robinson