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


Модель объектов документов XML (DOM)

Класс объектной модели 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, например узлов элементов, ссылочных узлов сущностей и т. д.

  • Извлеките все узлы, а также информацию, которую содержит узел, например текст в узле элемента.

    Замечание

    Если приложению не требуются возможности структуры или редактирования, предоставляемые DOM, классы XmlReader и XmlWriter предоставляют не кешируемый, однонаправленный потоковый доступ к XML. Дополнительные сведения см. в разделах XmlReader и XmlWriter.

Объекты узла имеют набор методов и свойств, а также основные и четко определенные характеристики. Ниже приведены некоторые из следующих характеристик:

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

  • Большинство узлов могут иметь несколько дочерних узлов, которые являются узлами непосредственно под ними. Ниже приведен список типов узлов, которые могут иметь дочерние узлы.

    • Документ

    • DocumentFragment

    • Ссылка на сущность

    • Элемент

    • Атрибут

    Узлы XmlDeclaration, Нотации, Entity, CDATASection, Text, Comment, ProcessingInstruction и DocumentType не имеют дочерних узлов.

  • Узлы, которые находятся на том же уровне, представлены на схеме узлами книги и pubinfo , являются братьями и сестрами.

Одна из характеристик DOM заключается в том, как он обрабатывает атрибуты. Атрибуты не являются узлами, которые являются частью родительских, дочерних и параллельных взаимоотношений. Атрибуты считаются свойством узла элемента и состоят из имени и пары значений. Например, если у вас есть XML-данные, состоящие из format="dollar", связанных с элементом price, слово format — это имя, а значение format атрибута — dollar. Чтобы получить format="dollar" атрибут узла price , вызовите метод GetAttribute , когда курсор находится на price узле элемента. Дополнительные сведения см. в разделе "Доступ к атрибутам" в DOM.

Так как XML считывается в память, создаются узлы. Однако не все узлы имеют одинаковый тип. Элемент в XML имеет разные правила и синтаксис, отличные от инструкции обработки. Таким образом, при чтении различных данных тип узла назначается каждому узлу. Этот тип узла определяет характеристики и функциональные возможности узла.

Дополнительные сведения о типах узлов, созданных в памяти, см. в разделе "Типы XML-узлов". Дополнительные сведения о объектах, созданных в дереве узлов, см. в разделе "Сопоставление иерархии объектов" с XML-данными.

Корпорация Майкрософт расширила API- интерфейсы, доступные в консорциуме W3C DOM уровня 1 и уровня 2, чтобы упростить работу с XML-документом. Несмотря на полную поддержку стандартов W3C, дополнительные классы, методы и свойства добавляют функциональные возможности, помимо того, что можно сделать с помощью W3C XML DOM. Новые классы позволяют получать доступ к реляционным данным, предоставляя методы синхронизации с ADO.NET данными, одновременно предоставляя данные как XML. Дополнительные сведения см. в разделе Синхронизация набора данных с помощью XmlDataDocument.

DOM является наиболее полезным для чтения XML-данных в память для изменения структуры, добавления или удаления узлов или изменения данных, удерживаемых узлом, как в тексте, содержаемом элементом. Однако другие классы доступны быстрее, чем DOM в других сценариях. Для быстрого, не кэшированного, прямого доступа к XML используйте XmlReader и XmlWriter. Если вам нужен случайный доступ с помощью модели курсора и XPath, используйте класс XPathNavigator .

См. также