174 votes

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

J’ai tombé sur ces deux mots-clés dans l’IntelliSense VS. J’ai essayé de googler la différence entre eux et n’a pas obtenu une réponse claire. Qui d'entre eux ont les meilleures performances avec petit à moyens fichiers XML. Merci

282voto

Mark Byers Points 318575

Elements trouve uniquement les éléments qui sont directement descendants, c'est à dire les enfants immédiats.

Descendants trouve les enfants à tous les niveaux, à savoir les enfants, petits-enfants, etc...


Voici un exemple 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 que vous souhaitez sont immédiats des enfants, alors vous obtiendrez de meilleures performances si vous utilisez Elements au lieu de Descendants.

16voto

Adam Robinson Points 88472

recherche toute la sous-arborescence de l’élément actuel pour le nom spécifié (ou renverra une version aplatie de l’arbre si aucun nom n’est fourni), alors que recherche uniquement les enfants immédiats de l’élément actuel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X