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

Класс XML DOM является представлением XML-документа в памяти.The XML Document Object Model (DOM) class is an in-memory representation of an XML document. Модель DOM позволяет читать, обрабатывать и изменять XML-документ программным образом.The DOM allows you to programmatically read, manipulate, and modify an XML document. Класс XmlReader также читает XML, но предоставляет только последовательный доступ для чтения без поддержки кэширования.The XmlReader class also reads XML; however, it provides non-cached, forward-only, read-only access. Это значит, что XmlReader не позволит изменять значения атрибутов или содержимое элемента, а также вставлять и удалять узлы.This means that there are no capabilities to edit the values of an attribute or content of an element, or the ability to insert and remove nodes with the XmlReader. Изменение - основная функция модели DOM.Editing is the primary function of the DOM. Это стандартизованный, структурированный способ представления XML-данных в памяти, хотя на самом деле данные XML хранятся в файлах и пересылаются из других объектов в строковом виде.It is the common and structured way that XML data is represented in memory, although the actual XML data is stored in a linear fashion when in a file or coming in from another object. Далее приведен пример XML-данных.The following is XML data.

Входные данныеInput

<?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.The following illustration shows how memory is structured when this XML data is read into the DOM structure.

Структура XML-документа Структура XML-документаXML document structure XML document structure

Каждый круг на этой иллюстрации представляет собой узел в структуре XML-документа, называемый объектом XmlNode.Within the XML document structure, each circle in this illustration represents a node, which is called an XmlNode object. Объект XmlNode является базовым объектом дерева DOM.The XmlNode object is the basic object in the DOM tree. Класс XmlDocument, расширяющий класс XmlNode, поддерживает методы для операций над документом в целом (например, для загрузки его в память или сохранения XML в файл).The XmlDocument class, which extends XmlNode, supports methods for performing operations on the document as a whole (for example, loading it into memory or saving the XML to a file. Кроме того, XmlDocument предоставляет возможности для просмотра узлов всего XML-документа и выполнения операций над ними.In addition, XmlDocument provides a means to view and manipulate the nodes in the entire XML document. И XmlNode, и XmlDocument обладают улучшенной производительностью, расширенной функциональностью и содержат методы и свойства, которые позволяют следующее.Both XmlNode and XmlDocument have performance and usability enhancements and have methods and properties to:

  • Получать доступ к DOM-специфичным узлам, например к узлам элементов, узлам ссылок на сущности и т. п., и изменять эти узлы.Access and modify nodes specific to the DOM, such as element nodes, entity reference nodes, and so on.

  • Получать целые узлы помимо содержащейся в них информации, например текста в узле элемента.Retrieve entire nodes, in addition to the information the node contains, such as the text in an element node.

    Примечание

    Для приложений, которым не требуется структуризация или изменение, предоставляемые моделью DOM, классы XmlReader и XmlWriter обеспечат последовательный потоковый доступ к XML без поддержки кэширования.If an application does not require the structure or editing capabilities provided by the DOM, the XmlReader and XmlWriter classes provide non-cached, forward-only stream access to XML. Дополнительные сведения см. в разделах XmlReader и XmlWriter.For more information, see XmlReader and XmlWriter.

Объекты Node обладают набором методов и свойств, а также хорошо определенных базовых характеристик.Node objects have a set of methods and properties, as well as basic and well-defined characteristics. Вот некоторые из этих характеристик:Some of these characteristics are:

  • У каждого узла есть один родительский узел, то есть узел, находящийся непосредственно над данным.Nodes have a single parent node, a parent node being a node directly above them. Единственный узел, не имеющий родителя - корневой узел документа, так как это узел верхнего уровня, содержащий сам документ и его фрагменты.The only nodes that do not have a parent is the Document root, as it is the top-level node and contains the document itself and document fragments.

  • У большинства узлов может быть несколько дочерних узлов, то есть узлов, расположенных непосредственно под ними.Most nodes can have multiple child nodes, which are nodes directly below them. Далее следует список типов узлов, которые могут иметь дочерние узлы:The following is a list of node types that can have child nodes.

    • DocumentDocument

    • DocumentFragmentDocumentFragment

    • EntityReferenceEntityReference

    • ЭлементElement

    • Attribute (XElement Dynamic Property) (Attribute (динамическое свойство XElement))Attribute

    Узлы XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction и DocumentType не могут иметь дочерних узлов.The XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction, and DocumentType nodes do not have child nodes.

  • Узлы, находящиеся на одном уровне наследования, например узлы book и pubinfo на нашей схеме, называются одноуровневыми.Nodes that are at the same level, represented in the diagram by the book and pubinfo nodes, are siblings.

Одна из характеристик модели DOM - способ обработки атрибутов.One characteristic of the DOM is how it handles attributes. Атрибуты не являются узлами, состоящими в родительских, дочерних и одноуровневых связях.Attributes are not nodes that are part of the parent, child, and sibling relationships. Атрибуты считаются собственностью узла элемента и представляют собой пару «имя-значение».Attributes are considered a property of the element node and are made up of a name and a value pair. Например, если XML-данные представляют собой конструкцию format="dollar, связанную с элементом price, слово format является именем атрибута, а значением атрибута format является dollar.For example, if you have XML data consisting of format="dollar" associated with the element price, the word format is the name, and the value of the format attribute is dollar. Чтобы получить атрибут format="dollar" узла price, воспользуйтесь методом GetAttribute, когда курсор расположен в узле элемента price.To retrieve the format="dollar" attribute of the price node, you call the GetAttribute method when the cursor is located at the price element node. Дополнительные сведения см. в статье Доступ к атрибутам в модели DOM.For more information, see Accessing Attributes in the DOM.

По мере считывания XML-документа в память создаются узлы.As XML is read into memory, nodes are created. Узлы бывают разных типов.However, not all nodes are the same type. Правила и синтаксис XML-элемента отличаются от правил и синтаксиса инструкции по обработке.An element in XML has different rules and syntax than a processing instruction. Поэтому по мере считывания разнообразных данных каждому узлу присваивается тип.Therefore, as various data is read, a node type is assigned to each node. Тип узла определяет его характеристики и функциональность.This node type determines the characteristics and functionality of the node.

Дополнительные сведения о типах узлов, создаваемых в памяти, см. в статье Типы XML-узлов.For more information on the types of nodes generated in memory, see Types of XML Nodes. Дополнительные сведения об объектах, создаваемых в дереве узлов, см. в статье Сопоставление объектной иерархии с XML-данными.For more information on the objects created in the node tree, see Mapping the Object Hierarchy to XML Data.

Корпорация Майкрософт расширила API-интерфейсы, доступные в DOM уровней 1 и 2 W3C, чтобы облегчить работу с XML-документами.Microsoft has extended the APIs that are available in the World Wide Web Consortium (W3C) DOM Level 1 and Level 2 to make it easier to work with an XML document. Дополнительные классы, методы и свойства полностью совместимы со стандартами W3C и добавляют дополнительную функциональность по сравнению с возможностями W3C XML DOM.While fully supporting the W3C standards, the additional classes, methods, and properties add functionality beyond what can be done using the W3C XML DOM. Новые классы позволяют получить доступ к реляционным данным, предоставляют методы синхронизации с данными ADO.NET, одновременно делая эти данные доступными в виде XML.New classes enable you to access relational data, giving you methods for synchronizing with ADO.NET data, simultaneously exposing data as XML. Дополнительные сведения см. в статье о синхронизации DataSet с XmlDataDocument.For more information, see Synchronizing a DataSet with an XmlDataDocument.

Модель DOM чрезвычайно полезна для считывания XML-данных в память, изменения их структуры, добавления и удаления узлов, изменения данных, принадлежащих узлу (например, текста, содержащегося в документе).The DOM is most useful for reading XML data into memory to change its structure, to add or remove nodes, or to modify the data held by a node as in the text contained by an element. Однако существуют и другие классы, которые в некоторых ситуациях работают быстрее модели DOM.However, other classes are available that are faster than the DOM in other scenarios. Классы XmlReader и XmlWriter предоставляют быстрый последовательный потоковый доступ к XML без поддержки кэширования.For fast, non-cached, forward-only stream access to XML, use the XmlReader and XmlWriter. Если вам нужен произвольный доступ с моделью курсора и XPath, используйте класс XPathNavigator.If you need random access with a cursor model and XPath, use the XPathNavigator class.

См. такжеSee also