Допустимое содержимое объектов XElement и XDocument (LINQ to XML)

В этой статье описываются допустимые аргументы, которые можно передать конструкторам и методам, используемым для добавления содержимого в элементы и документы.

Допустимые типы для конструктора XElement

Возвращаемые запросами данные часто выражаются с помощью коллекций IEnumerable<T> элементов XElement или с помощью коллекций IEnumerable<T> атрибутов XAttribute. Можно передавать коллекции объектов XElement или XAttribute в конструктор XElement. Именно поэтому удобно передавать результаты запроса в виде содержимого в методы и конструкторы, которые используются для заполнения деревьев XML.

При добавлении простого содержимого в этот метод можно передать различные типы, включая::

При добавлении сложного содержимого в этот метод можно передать различные типы, включая:

Если объект реализует интерфейс IEnumerable<T>, коллекция в этом объекте перечисляется и добавляются все элементы коллекции. Если коллекция содержит объекты XNode или XAttribute, каждый ее элемент добавляется отдельно. Если коллекция содержит текст (или объекты, преобразованные в текст), текст в коллекции объединяется и добавляется в виде единого текстового узла.

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

Добавленный атрибут должен иметь уникальное имя внутри содержащего его элемента.

Если при добавлении объектов XNode или XAttribute новое содержимое не имеет родителя, то эти объекты просто добавляются к XML-дереву. Если же новое содержимое уже имеет родителя и является частью другого XML-дерева, тогда это содержимое клонируется, а вновь созданный клон присоединяется к XML-дереву.

Допустимые типы для конструктора XDocument

Атрибуты и простое содержимое нельзя добавить в документ.

Существует не много сценариев, требующих создания XDocument. Вместо этого обычно имеется возможность создавать XML-деревья с корневым узлом XElement. Если у вас нет конкретного требования к созданию документа (например, так как вам нужно создавать инструкции и комментарии на верхнем уровне или поддерживать типы документов), часто удобнее использовать XElement в качестве корневого узла.

Допустимые типы для конструктора XDocument включают следующие:

  • Ноль или один объект XDocumentType. Типы документов должны указываться до элемента.
  • Ноль или один элемент.
  • Ноль или более комментариев.
  • Ноль или более инструкций по обработке.
  • Ноль или более текстовых узлов, содержащих только пробел.

Конструкторы и функции для добавления содержимого

Следующие методы позволяют добавлять дочернее содержимое к элементу XElement или к документу XDocument.

Метод Description
XElement Создает элемент XElement.
XDocument Создает документ XDocument.
Add Добавляет к концу дочернего содержимого элемента XElement или документа XDocument.
AddAfterSelf Добавляет содержимое после XNode.
AddBeforeSelf Добавляет содержимое перед XNode.
AddFirst Добавляет содержимое в начале дочернего содержимого XContainer.
ReplaceAll Заменяет все содержимое (дочерние узлы и атрибуты) элемента XElement.
ReplaceAttributes Заменяет атрибуты элемента XElement.
ReplaceNodes Заменяет дочерние узлы новым содержимым.
ReplaceWith Заменяет узел новым содержимым.

См. также