Модель DOM для XML
Обновлен: November 2007
Класс XML DOM является представлением XML-документа в памяти. Модель DOM позволяет читать, обрабатывать и изменять XML-документ программным образом. Класс XmlReader также читает XML; однако он обеспечивает некэшируемый однопроходный доступ только для чтения. Это значит, что у XmlReader нет возможности изменять значения атрибута, содержимое элемента, вставлять и удалять узлы. Изменение — основная функция модели DOM. Это стандартизованный, структурированный способ представления XML-данных в памяти, хотя на самом деле данные XML хранятся в файлах и пересылаются из других объектов в строковом виде. Далее приведен пример XML-данных.
Вход
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
Далее показано, какая структура будет создана в памяти, когда эти XML-данные считываются в модель структуры DOM.
Структура XML-документа
Каждый круг в данной иллюстрации представляет собой узел в структуре XML-документа, называемый объектом XmlNode . Объект XmlNode является базовым объектом дерева DOM. Класс XmlDocument, расширяющий класс XmlNode, поддерживает методы для выполнения операций над документом в целом (например, загрузки его в память или сохранения XML в файл). Кроме того, XmlDocument предоставляет возможности для просмотра узлов всего XML-документа и выполнения операций над ними. И XmlNode, и XmlDocument обладают улучшенной производительностью, расширенной функциональностью и содержат методы и свойства, которые позволяют следующее.
Получать доступ к DOM-специфичным узлам, например к узлам элементов, узлам ссылок на сущности и т. п., и изменять эти узлы.
Получать целые узлы помимо содержащейся в них информации, например текста в узле элемента.
Примечание. Если приложению не требуется структуризация или изменение, предоставляемые моделью DOM, классы XmlReader и XmlWriter предоставляют некэшируемый однопроходный потоковый доступ к XML. Дополнительные сведения см. в разделах Чтение XML с помощью XmlReader и Запись XML с помощью XmlWriter.
Объекты Node обладают набором методов и свойств, а также базовых, хорошо определенных характеристик. Вот некоторые из этих характеристик:
У каждого узла есть один родительский узел, то есть узел, находящийся непосредственно над данным. Единственный узел, не имеющий родителя — корневой узел документа, так как это узел верхнего уровня, содержащий сам документ и его фрагменты.
У большинства узлов может быть несколько дочерних узлов, то есть узлов, расположенных непосредственно под ними. Далее следует список типов узлов, которые могут иметь дочерние узлы:
Document
DocumentFragment
EntityReference
Element
Attribute
Узлы XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction и DocumentType не могут иметь дочерних узлов.
Узлы, находящиеся на одном уровне, — как узлы book and pubinfo на схеме, — называются одноуровневыми.
Одна из характеристик модели DOM — способ обработки атрибутов. Атрибуты не являются узлами, состоящими в родительских, дочерних и одноуровневых связях. Атрибуты считаются собственностью узла элемента и представляют собой пару «имя-значение». Например, если XML-данные представляют собой конструкцию format="dollar, связанную с элементом price, слово format является именем атрибута, а значением атрибута format является dollar. Для получения атрибута format="dollar" узла price можно воспользоваться методом GetAttribute, когда курсор расположен в узле элемента price. Дополнительные сведения см. в разделе Доступ к атрибутам в модели DOM.
По мере считывания XML-документа в память создаются узлы. Узлы бывают разных типов. Правила и синтаксис XML-элемента отличаются от правил и синтаксиса инструкции по обработке. Поэтому по мере считывания разнообразных данных каждому узлу присваивается тип. Тип узла определяет его характеристики и функциональность.
Дополнительные сведения о типах узлов, создаваемых в памяти, см. в разделе Типы XML-узлов. Дополнительные сведения об объектах, создаваемых в дереве узлов, см. в разделе Сопоставление объектной иерархии с XML-данными.
Корпорация Майкрософт расширила API-интерфейсы, доступные в DOM уровней 1 и 2 W3C, чтобы облегчить работу с XML-документами. Дополнительные классы, методы и свойства полностью совместимы со стандартами W3C и добавляют дополнительную функциональность по сравнению с возможностями W3C XML DOM. Новые классы позволяют получить доступ к реляционным данным, предоставляют методы синхронизации с данными ADO.NET, одновременно делая эти данные доступными в виде XML. Дополнительные сведения см. в разделе Синхронизация DataSet с XmlDataDocument.
Модель DOM чрезвычайно полезна для считывания XML-данных в память, изменения их структуры, добавления и удаления узлов, изменения данных, принадлежащих узлу (например, текста, содержащегося в документе). Однако существуют и другие классы, которые в некоторых ситуациях работают быстрее модели DOM. Классы XmlReader и XmlWriter предоставляют быстрый некэшируемый однопроходный потоковый доступ к XML. Если нужен произвольный доступ с моделью курсора и XPath, используется класс XPathNavigator.