Модель DOM для XML
Класс 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.