Ответ 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
.