Відповіді:
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);
}
Результат:
Елементи: Тест 1 Елементи: Тест 3 Нащадки: Тест 1 Нащадки: тест 2 Нащадки: Тест 3
Якщо ви знаєте, що елементи, які ви хочете, - це безпосередньо діти, то ви отримаєте кращі показники, якщо використовуватимете Elements
замість них Descendants
.
Descendants
здійснить пошук у всьому піддереві поточного елемента за вказаним іменем (або поверне уплощенную версію дерева, якщо ім'я не вказано), тоді як Elements
шукає лише безпосередніх дітей поточного елемента.