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.