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


182

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. Lequel d'entre eux a les meilleures performances avec des fichiers XML petits à moyens. Merci

Réponses:


293

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

Descendants trouve des enfants à tous les niveaux, c'est-à-dire des enfants, des 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 les utilisez à la Elementsplace de Descendants.


Excellente réponse, j'ai toujours pensé que les deux étaient un peu en arrière comme souligné dans votre description (lorsque vous décrivez des éléments, vous devez toujours utiliser le mot «descendant», car il est un peu plus facultatif lorsque vous parlez de Descendants
Mattisdada

17

Descendantsrecherchera le nom spécifié dans tout le sous-arbre de l'élément courant (ou retournera une version aplatie de l'arborescence si aucun nom n'est fourni), tandis que Elementsne recherche que les enfants immédiats de l'élément courant.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.