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
.