Поделиться через


Модель 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-документа

Каждый круг в данной иллюстрации представляет собой узел в структуре XML-документа, называемый объектом XmlNode . Объект XmlNode является базовым объектом дерева DOM. Класс XmlDocument, расширяющий класс XmlNode, поддерживает методы для выполнения операций над документом в целом (например, загрузки его в память или сохранения XML в файл). Кроме того, XmlDocument предоставляет возможности для просмотра узлов всего XML-документа и выполнения операций над ними. И XmlNode, и XmlDocument обладают улучшенной производительностью, расширенной функциональностью и содержат методы и свойства, которые позволяют следующее.

  • Получать доступ к DOM-специфичным узлам, например к узлам элементов, узлам ссылок на сущности и т. п., и изменять эти узлы.

  • Получать целые узлы помимо содержащейся в них информации, например текста в узле элемента.

    hf9hbf87.alert_note(ru-ru,VS.90).gifПримечание.

    Если приложению не требуется структуризация или изменение, предоставляемые моделью 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.

См. также

Основные понятия

Типы XML-узлов

Сопоставление объектной иерархии с XML-данными