Qual è la differenza tra Linq e XML Discendenti ed elementi


181

Ho trovato entrambe queste parole chiave in VS IntelliSense. Ho cercato di cercare su Google la differenza tra loro e non ho avuto una risposta chiara. Quale di questi ha le migliori prestazioni con file XML da piccoli a medi. Grazie

Risposte:


292

Elementstrova solo quegli elementi che sono discendenti diretti , cioè figli immediati.

Descendants trova bambini a qualsiasi livello, ad esempio bambini, nipoti, ecc.


Ecco un esempio che dimostra la differenza:

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

Codice:

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

Risultato:

Elementi: test 1
Elementi: test 3
Discendenti: Test 1
Discendenti: Test 2
Discendenti: Test 3

Se sai che gli elementi che desideri sono figli immediati, otterrai prestazioni migliori se lo usi Elementsinvece di Descendants.


Ottima risposta, ho sempre pensato che i due fossero un po 'arretrati, come evidenziato nella tua descrizione (quando descrivi gli Elementi, devi sempre usare la parola "discendente" dove è un po' più opzionale quando parliamo di Discendenti
— Mattisdada,

16

Descendantscercherà l'intero sottotree dell'elemento corrente per il nome specificato (o restituirà una versione appiattita dell'albero se non viene fornito alcun nome), mentre Elementscerca solo i figli immediati dell'elemento corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.