В чем разница между потомками Linq to XML и элементами


Я столкнулся с обоими этими ключевыми словами в VS IntelliSense. Я попытался погуглить разницу между ними и не получил четкого ответа. Какой из них имеет лучшую производительность с небольшими и средними XML-файлами. Спасибо

2 162

2 ответа:

Elements находит только те элементы, которые являются прямые потомки, т. е. непосредственные дети.

Descendants находит детей на любом уровне, т. е. детей, внуков и т. д...


вот пример, демонстрирующий разницу:

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

код:

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

результат:

Elements : Test 1
Elements : Test 3
Descendants : Test 1
Descendants : Test 2
Descendants : Test 3

если вы знаете, что элементы, которые вы хотите, являются непосредственными детьми, то вы получите лучше производительность если вы используете Elements вместо Descendants.

Descendants будет искать все поддерево текущего элемента для указанного имени (или вернет сглаженную версию дерева, если имя не указано), тогда как Elements поиск только непосредственных потомков текущего элемента.