Допустимое содержимое объектов XElement и XDocument (LINQ to XML)
В этой статье описываются допустимые аргументы, которые можно передать конструкторам и методам, используемым для добавления содержимого в элементы и документы.
Допустимые типы для конструктора XElement
Возвращаемые запросами данные часто выражаются с помощью коллекций IEnumerable<T> элементов XElement или с помощью коллекций IEnumerable<T> атрибутов XAttribute. Можно передавать коллекции объектов XElement или XAttribute в конструктор XElement. Именно поэтому удобно передавать результаты запроса в виде содержимого в методы и конструкторы, которые используются для заполнения деревьев XML.
При добавлении простого содержимого в этот метод можно передать различные типы, включая::
- String
- Double
- Single
- Decimal
- Boolean
- DateTime
- TimeSpan
- DateTimeOffset
- Любой тип, реализующий
Object.ToString
. - Любой тип, реализующий IEnumerable<T>.
При добавлении сложного содержимого в этот метод можно передать различные типы, включая:
- XObject
- XNode
- XAttribute
- Любой тип, реализующий объект IEnumerable<T>.
Если объект реализует интерфейс 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 | Заменяет узел новым содержимым. |