Операция Elements

58

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

Эта операция отличается от Descendants, поскольку операция Elements возвращает только непосредственные дочерние элементы каждого из элементов входной последовательности, в то время как операция Descendants рекурсивно возвращает все дочерние элементы до достижения конца каждого дерева.

Операция Elements имеет два прототипа, описанные ниже:

Первый прототип Elements
public static IEnumerable<XElement> Elements<T> (
   this IEnumerable<T> source 
   ) where T : XContainer

Эта версия вызывается на последовательности элементов или документов и возвращает последовательность, содержащую дочерние элементы каждого исходного элемента. Операция отличается от метода XContainer.Elements в том, что этот метод вызывается на последовательности элементов или документов, а не на единственном элементе или документе.

Второй прототип Elements
public static IEnumerable<XElement> Elements<T> ( 
   this IEnumerable<T> source, 
   XName name 
   ) where T : XContainer

Эта версия подобна первой, за исключением дополнительного параметра, заставляющего операцию извлекать в выходную последовательность только те элементы, имя которых соответствует значению этого параметра.

Ниже представлен пример вызова первого прототипа операции Elements:

XDocument xDoc = new XDocument(
             new XElement("Employees",
               new XElement("Employee",
                 new XAttribute("type", "Programmer"),
                 new XComment("Это программист"),
                 new XElement("FirstName", "Alex"), 
                 new XElement("LastName", "Erohin")),
               new XElement("Employee",
                 new XAttribute("type", "Editor"),
                 new XElement("FirstName", "Elena"), new XElement("LastName", "Volkova"))));

            IEnumerable<XElement> elements = xDoc.Element("Employees").Elements();

            foreach (XElement e in elements)
            {
                Console.WriteLine(e + "\n");
            }

Данный код выбирает все дочерние элементы по отношению к элементу Employees:

Вызов первого прототипа Elements

В этом примере возвращаются все дочерние элементы. Чтобы извлечь лишь элементы, соответствующие указанному имени, используется второй прототип операция Elements:

...
IEnumerable<XElement> elements = xDoc.Element("Employees").Elements("Employee");
...

В данном случае результат не изменится, т.к. элементы Employee являются единственными дочерними элементами элемента Employees.

Пройди тесты
Лучший чат для C# программистов