Технология LINQ to XML предоставляет программный интерфейс для работы с XML-документами, описываемыми в виде дерева объектов. Этот программный интерфейс обеспечивает создание, редактирование и трансформацию XML, при этом возможно применение LINQ-подобного синтаксиса.
LINQ to XML содержит набор классов, сосредоточенных в пространстве имён System.Xml.Linq (рис. 2):
Рис. 2. Основные классы LINQ to XML.
Абстрактные классы XObject, XNode и XContainer служат основой для иерархии классов, соответствующих различным объектам XML.
Классы XElement и XDocument представляют XML-элемент и XML-документ соответственно.
Класс XAttribute служит для описания XML-атрибута.
public XElement(XName name, params object[] content);
Обсудим использование четвёртой версии, которая позволяет указать имя элемента и его содержимое. Заметим, что существует неявное преобразование строки в XName. Интерпретация аргумента content производится по табл. 14.
Таблица 14
Интерпретация аргумента content
Тип или значение content
Способ обработки
string
Преобразуется в дочерний объект типа XText и добавляется как текстовое содержимое элемента
XText
Добавляет как дочерний объект текстовое содержимое элемента
XElement
Добавляется как дочерний элемент
XAttribute
Добавляется как атрибут элемента
XProcessingInstruction, XComment
Добавляется как дочернее содержимое1
IEnumerable
Объект перечисляется и обрабатывается рекурсивно. Коллекция строк добавляется в виде единого текста
null
Этот объект игнорируется
Любой прочий тип
Вызывается метод ToString(), и результат трактуется как string
Ниже приведены различные варианты вызова конструктора XElement:
var e1 = new XElement("name", "Earth");
// Earth
var e2 = new XElement("planet", e1);
//
// Earth
//
var e3 = new XElement("period", new XAttribute("units", "days"));
//
var e4 = new XElement("comment", new XComment("the comment"));