Linq to XML Descendants ve Elements arasındaki fark nedir


181

Her iki anahtar kelime VS IntelliSense karşılaştım. Aralarındaki farkı aramaya çalıştım ve net bir cevap alamadım. Bunlardan hangisi küçük ve orta XML dosyaları ile en iyi performansa sahiptir. Teşekkürler

Yanıtlar:


292

Elementsyalnızca doğrudan soyundan gelen unsurları bulur , yani derhal çocuklar.

Descendants Herhangi bir düzeyde çocuk bulur, yani çocuklar, büyük çocuklar, vb ...


İşte farkı gösteren bir örnek:

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

Kod:

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

Sonuç:

Öğeler: Test 1
Öğeler: Test 3
Torunları: Test 1
Torunları: Test 2
Torunları: Test 3

İstediğiniz öğelerin hemen çocuk olduğunu biliyorsanız, Elementsyerine kullanmak yerine daha iyi performans elde edersiniz Descendants.


Harika yanıt, her zaman ikinizin açıklamanızda vurgulandığı gibi biraz geriye doğru olduğunu düşündüm (Elements'i tanımlarken, torunlar hakkında konuşurken biraz daha isteğe bağlı olduğu için "soyundan" kelimesini her zaman kullanmanız gerekir
Mattisdada

16

Descendantsgeçerli öğenin tüm alt ağacını belirtilen ad için arar (veya ad yoksa, ağacın düzleştirilmiş bir sürümünü döndürür), ancak Elementsgeçerli öğenin yalnızca hemen alt öğelerini arar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.