Apa perbedaan antara Linq dengan XML Descendants and Elements


181

Saya telah menemukan kedua kata kunci ini di IntelliSense VS. Saya mencoba mencari perbedaan di antara mereka dan tidak mendapatkan jawaban yang jelas. Yang mana dari ini memiliki kinerja terbaik dengan file XML kecil hingga menengah. Terima kasih

Jawaban:


292

Elementshanya menemukan unsur-unsur yang merupakan keturunan langsung , yaitu anak-anak langsung.

Descendants menemukan anak-anak di tingkat mana pun, yaitu anak-anak, cucu, dll ...


Berikut adalah contoh yang menunjukkan perbedaan:

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

Kode:

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

Hasil:

Elemen: Uji 1
Elemen: Tes 3
Keturunan: Tes 1
Keturunan: Tes 2
Keturunan: Tes 3

Jika Anda tahu bahwa unsur-unsur yang Anda inginkan adalah anak-anak segera maka Anda akan mendapatkan kinerja yang lebih baik jika Anda menggunakan Elementsbukan Descendants.


Jawaban yang bagus, saya selalu berpikir keduanya sedikit mundur seperti yang disorot dalam deskripsi Anda (ketika menggambarkan Elemen, Anda selalu perlu menggunakan kata "turunan" di mana karena sedikit lebih opsional ketika berbicara tentang Keturunan
Mattisdada

16

Descendantsakan mencari seluruh subtree elemen saat ini untuk nama yang ditentukan (atau akan mengembalikan versi pohon yang rata jika tidak ada nama yang diberikan), sedangkan Elementsmencari hanya anak-anak langsung dari elemen saat ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.