Операция Elements
58LINQ --- LINQ to XML --- Операция Elements
Операция 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](files/img50253.jpg)
В этом примере возвращаются все дочерние элементы. Чтобы извлечь лишь элементы, соответствующие указанному имени, используется второй прототип операция Elements:
...
IEnumerable<XElement> elements = xDoc.Element("Employees").Elements("Employee");
...
В данном случае результат не изменится, т.к. элементы Employee являются единственными дочерними элементами элемента Employees.