В чем разница между потомками Linq и XML и элементами - PullRequest
171 голосов
/ 14 сентября 2010

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

Ответы [ 2 ]

279 голосов
/ 14 сентября 2010

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

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

1012

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

<?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.

16 голосов
/ 14 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...