Функциональное построение (LINQ to XML)
LINQ to XML предоставляет эффективный способ создания XML-элементов, который называется функциональным построением. Функциональное построение - это возможность создания XML-дерева одной инструкцией.
Существует несколько основных функций интерфейса программирования LINQ to XML, обеспечивающих функциональное построение.
Конструктор XElement принимает различные типы аргументов для содержимого. Например, можно передать еще один объект XElement, который станет дочерним элементом. Можно передать объект XAttribute, который станет атрибутом элемента. Можно также передать любой другой тип объекта, который будет преобразован в строку и станет текстовым содержимым элемента.
Конструктор XElement принимает массив params типа Object, так что этому конструктору можно передать любое количество объектов. Это позволяет создавать элементы со сложным содержимым.
Если объект реализует интерфейс IEnumerable, коллекция в этом объекте перечисляется и добавляются все элементы коллекции. Если коллекция содержит объекты XElement или XAttribute, каждый ее элемент добавляется отдельно. Это важно, так как позволяет передавать результаты запроса LINQ конструктору.
Эти функции позволяют использовать код для создания XML-деревьев. Ниже представлен пример такого кода.
XElement contacts =
new XElement("Contacts",
new XElement("Contact",
new XElement("Name", "Patrick Hines"),
new XElement("Phone", "206-555-0144"),
new XElement("Address",
new XElement("Street1", "123 Main St"),
new XElement("City", "Mercer Island"),
new XElement("State", "WA"),
new XElement("Postal", "68042")
)
)
);
Эти функции позволяют также написать следующий код, в котором используются результаты запросов LINQ при создании XML-дерева.
XElement srcTree = new XElement("Root",
new XElement("Element", 1),
new XElement("Element", 2),
new XElement("Element", 3),
new XElement("Element", 4),
new XElement("Element", 5)
);
XElement xmlTree = new XElement("Root",
new XElement("Child", 1),
new XElement("Child", 2),
from el in srcTree.Elements()
where (int)el > 2
select el
);
Console.WriteLine(xmlTree);
В Visual Basic такой же результат достигается при помощи XML-литералов.
Dim srcTree As XElement = _
<Root>
<Element>1</Element>
<Element>2</Element>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>
Dim xmlTree As XElement = _
<Root>
<Child>1</Child>
<Child>2</Child>
<%= From el In srcTree.Elements() _
Where CInt(el) > 2 _
Select el %>
</Root>
Console.WriteLine(xmlTree)
В этом примере выводятся следующие данные:
<Root>
<Child>1</Child>
<Child>2</Child>
<Element>3</Element>
<Element>4</Element>
<Element>5</Element>
</Root>