Modelo de objetos de documento (DOM) XMLXML Document Object Model (DOM)

La clase Modelo de objetos de documento XML (DOM) es una representación en la memoria de un documento XML.The XML Document Object Model (DOM) class is an in-memory representation of an XML document. DOM permite leer, manipular y modificar un documento XML mediante programación.The DOM allows you to programmatically read, manipulate, and modify an XML document. La clase XmlReader también lee XML, aunque proporciona acceso de solo avance y de solo lectura sin almacenamiento en memoria caché.The XmlReader class also reads XML; however, it provides non-cached, forward-only, read-only access. Esto significa que no hay funciones para editar los valores de un atributo o contenido de un elemento, ni la posibilidad de agregar y quitar nodos con 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. La edición es la función principal de DOM.Editing is the primary function of the DOM. Es la forma común y estructurada mediante la que se representan datos XML en la memoria, aunque los datos XML reales se almacenan de forma lineal cuando se encuentran en un archivo o proceden de otro objeto.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. A continuación se muestran datos XML:The following is XML data.

EntradaInput

<?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>

En la ilustración siguiente se muestra cómo se estructura la memoria cuando se leen estos datos XML en la estructura DOM.The following illustration shows how memory is structured when this XML data is read into the DOM structure.

Estructura de documentos XML Estructura de documentos XMLXML document structure XML document structure

Dentro de la estructura de los documentos XML, cada círculo de esta ilustración representa un nodo, que se denomina objeto XmlNode.Within the XML document structure, each circle in this illustration represents a node, which is called an XmlNode object. El objeto XmlNode es el objeto básico del árbol de DOM.The XmlNode object is the basic object in the DOM tree. La clase XmlDocument, que extiende la clase XmlNode, admite métodos para realizar operaciones en el documento en conjunto (por ejemplo, cargarlo en la memoria o guardar el código XML en un archivo).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. Además, la clase XmlDocument proporciona un medio para ver y manipular los nodos de todo el documento XML.In addition, XmlDocument provides a means to view and manipulate the nodes in the entire XML document. Las clases XmlNode y XmlDocument han mejorado el rendimiento y la capacidad de uso y disponen de métodos y propiedades para realizar lo siguiente:Both XmlNode and XmlDocument have performance and usability enhancements and have methods and properties to:

  • Obtener acceso y modificar nodos específicos de DOM, como nodos de elemento, de referencia de entidad, etc.Access and modify nodes specific to the DOM, such as element nodes, entity reference nodes, and so on.

  • Recuperar nodos completos, además de la información que contiene el nodo, como el texto de un nodo de elemento.Retrieve entire nodes, in addition to the information the node contains, such as the text in an element node.

    Nota

    Si una aplicación no requiere la estructura o las funciones de edición proporcionadas por DOM, las clases XmlReader y XmlWriter proporcionan acceso a secuencias de XML de solo avance sin almacenamiento en caché.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. Para obtener más información, vea XmlReader y XmlWriter.For more information, see XmlReader and XmlWriter.

Los objetos Node tienen un conjunto de métodos y propiedades, así como características básicas y bien definidas.Node objects have a set of methods and properties, as well as basic and well-defined characteristics. Algunas de estas características son:Some of these characteristics are:

  • Un nodo tiene un único nodo primario, que se encuentra directamente encima de él.Nodes have a single parent node, a parent node being a node directly above them. Los únicos nodos que no tienen un nodo primario son la raíz del documento, puesto que éste es el nodo de nivel superior y contiene el propio documento y fragmentos de documento.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.

  • La mayor parte de los nodos pueden tener varios nodos secundarios, que son los que están situados inmediatamente debajo de ellos.Most nodes can have multiple child nodes, which are nodes directly below them. A continuación se muestra una lista de tipos de nodo que pueden tener nodos secundarios.The following is a list of node types that can have child nodes.

    • DocumentDocument

    • DocumentFragmentDocumentFragment

    • EntityReferenceEntityReference

    • ElementElement

    • AttributeAttribute

    Los nodos XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction y DocumentType no tienen nodos secundarios.The XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction, and DocumentType nodes do not have child nodes.

  • Los nodos que se encuentran en el mismo nivel, representados en el diagrama por los nodos book y pubinfo, son nodos relacionados.Nodes that are at the same level, represented in the diagram by the book and pubinfo nodes, are siblings.

La forma de controlar los atributos es una característica de DOM.One characteristic of the DOM is how it handles attributes. Los atributos no son nodos que forman parte de las relaciones entre los nodos primarios y secundarios y entre nodos relacionados.Attributes are not nodes that are part of the parent, child, and sibling relationships. Los atributos se consideran una propiedad del nodo de elemento y están formados por un par nombre-valor.Attributes are considered a property of the element node and are made up of a name and a value pair. Por ejemplo, si tiene datos XML formados por format="dollar" asociados con el elemento price, la palabra format es el nombre, y el valor del atributo format es 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. Para recuperar el atributo format="dollar" del nodo price, se llama al método GetAttribute cuando el cursor se encuentra en el nodo de elemento 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. Para obtener más información, vea Acceso a atributos en DOM.For more information, see Accessing Attributes in the DOM.

Los nodos se crean al leer XML en la memoria.As XML is read into memory, nodes are created. Sin embargo, no todos los nodos son del mismo tipo.However, not all nodes are the same type. Un elemento, en XML, tiene reglas y sintaxis diferentes a las de una instrucción de procesamiento.An element in XML has different rules and syntax than a processing instruction. Por tanto, cuando se leen varios datos, se asigna a cada nodo un tipo.Therefore, as various data is read, a node type is assigned to each node. Este tipo determina las características y funcionalidad del nodo.This node type determines the characteristics and functionality of the node.

Para obtener más información acerca de los tipos de nodo generados en la memoria, vea Tipos de nodos XML.For more information on the types of nodes generated in memory, see Types of XML Nodes. Para obtener más información acerca de los objetos creados en el árbol de nodos, vea Asignar la jerarquía de objetos a datos XML.For more information on the objects created in the node tree, see Mapping the Object Hierarchy to XML Data.

Microsoft ha extendido las API (Interfaz de programación de aplicaciones) que están disponibles en el nivel 1 y nivel 2 de DOM del W3C (World Wide Web Consortium) para facilitar el trabajo con documentos 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. Aunque son totalmente compatibles con las normas del W3C, las clases, métodos y propiedades adicionales añaden funcionalidades que sobrepasan lo que puede realizarse mediante el XML DOM de W3C.While fully supporting the W3C standards, the additional classes, methods, and properties add functionality beyond what can be done using the W3C XML DOM. Las nuevas clases permiten tener acceso a datos relacionales, proporcionan métodos para sincronizar con datos de ADO.NET y exponen simultáneamente datos como XML.New classes enable you to access relational data, giving you methods for synchronizing with ADO.NET data, simultaneously exposing data as XML. Para obtener más información, vea Sincronizar DataSet con XmlDataDocument.For more information, see Synchronizing a DataSet with an XmlDataDocument.

DOM resulta más útil para leer datos XML en la memoria y cambiar su estructura, agregar o quitar nodos, o modificar los datos mantenidos en un nodo como en el texto contenido en un elemento.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. No obstante, hay otras clases disponibles que son más rápidas que DOM en otros escenarios.However, other classes are available that are faster than the DOM in other scenarios. Para tener un acceso rápido, solo hacia delante y sin almacenamiento en caché a secuencias de XML, utilice XmlReader y XmlWriter.For fast, non-cached, forward-only stream access to XML, use the XmlReader and XmlWriter. Si necesita acceso aleatorio con un modelo de cursor y XPath, utilice la clase XPathNavigator.If you need random access with a cursor model and XPath, use the XPathNavigator class.

Vea tambiénSee also