Я столкнулся с этими двумя ключевыми словами в VS IntelliSense. Я пытался разыграть разницу между ними и не получил четкого ответа. Какой из них имеет лучшую производительность с небольшими и средними XML файлами. Благодаря
В чем разница между Linq и потомками XML и элементами
Ответ 1
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
.
Ответ 2
Descendants
выполнит поиск по всему поддереву текущего элемента для указанного имени (или вернет сглаженную версию дерева, если имя не указано), тогда как Elements
выполняет поиск только ближайших дочерних элементов текущего элемента.