En esta página

QDomDocument Class

La clase QDomDocument representa un documento XML. Más...

Cabecera: #include <QDomDocument>
CMake: find_package(Qt6 REQUIRED COMPONENTS Xml)
target_link_libraries(mytarget PRIVATE Qt6::Xml)
qmake: QT += xml
Hereda: QDomNode

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

(since 6.5) struct ParseResult
(since 6.5) enum class ParseOption { Default, UseNamespaceProcessing, PreserveSpacingOnlyNodes }
flags ParseOptions

Funciones Públicas

QDomDocument()
QDomDocument(const QDomDocumentType &doctype)
QDomDocument(const QString &name)
QDomDocument(const QDomDocument &document)
~QDomDocument()
QDomAttr createAttribute(const QString &name)
QDomAttr createAttributeNS(const QString &nsURI, const QString &qName)
QDomCDATASection createCDATASection(const QString &value)
QDomComment createComment(const QString &value)
QDomDocumentFragment createDocumentFragment()
QDomElement createElement(const QString &tagName)
QDomElement createElementNS(const QString &nsURI, const QString &qName)
QDomEntityReference createEntityReference(const QString &name)
QDomProcessingInstruction createProcessingInstruction(const QString &target, const QString &data)
QDomText createTextNode(const QString &value)
QDomDocumentType doctype() const
QDomElement documentElement() const
QDomElement elementById(const QString &elementId)
QDomNodeList elementsByTagName(const QString &tagname) const
QDomNodeList elementsByTagNameNS(const QString &nsURI, const QString &localName)
QDomImplementation implementation() const
QDomNode importNode(const QDomNode &importedNode, bool deep)
QDomNode::NodeType nodeType() const
(since 6.5) QDomDocument::ParseResult setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default)
(since 6.5) QDomDocument::ParseResult setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)
QByteArray toByteArray(int indent = 1) const
QString toString(int indent = 1) const
QDomDocument &operator=(const QDomDocument &other)

Descripción Detallada

La clase QDomDocument representa el documento XML completo. Conceptualmente, es la raíz del árbol del documento, y proporciona el acceso principal a los datos del documento.

Dado que los elementos, nodos de texto, comentarios, instrucciones de procesamiento, etc., no pueden existir fuera del contexto de un documento, la clase document también contiene las funciones de fábrica necesarias para crear estos objetos. Los objetos nodo creados tienen una función ownerDocument() que los asocia con el documento dentro de cuyo contexto fueron creados. Las clases DOM que se utilizarán con más frecuencia son QDomNode, QDomDocument, QDomElement y QDomText.

El XML analizado se representa internamente mediante un árbol de objetos a los que se puede acceder utilizando las distintas clases QDom. Todas las clases QDom sólo hacen referencia a objetos del árbol interno. Los objetos internos del árbol DOM se borrarán una vez que se borre el último objeto QDom que los referencie o el propio QDomDocument.

La creación de elementos, nodos de texto, etc. se realiza utilizando las diversas funciones de fábrica proporcionadas en esta clase. El uso de los constructores por defecto de las clases QDom sólo dará como resultado objetos vacíos que no podrán ser manipulados o insertados en el Documento.

La clase QDomDocument tiene varias funciones para crear datos de documento, por ejemplo, createElement(), createTextNode(), createComment(), createCDATASection(), createProcessingInstruction(), createAttribute() y createEntityReference(). Algunas de estas funciones tienen versiones que admiten espacios de nombres, es decir, createElementNS() y createAttributeNS(). La función createDocumentFragment() se utiliza para retener partes del documento; esto resulta útil para manipular documentos complejos.

El contenido completo del documento se fija con setContent(). Esta función analiza la cadena que se le pasa como un documento XML y crea el árbol DOM que representa el documento. El elemento raíz está disponible con documentElement(). La representación textual del documento puede obtenerse utilizando toString().

Nota: El árbol DOM puede acabar reservando mucha memoria si el documento XML es grande. Para este tipo de documentos, la clase QXmlStreamReader puede ser una mejor solución.

Es posible insertar un nodo de otro documento en el documento utilizando importNode().

Se puede obtener una lista de todos los elementos que tienen una etiqueta determinada con elementsByTagName() o con elementsByTagNameNS().

Las clases QDom se suelen utilizar del siguiente modo:

QDomDocument doc("mydocument");
QFile file("mydocument.xml");
if (!file.open(QIODevice::ReadOnly))
    return;
if (!doc.setContent(&file)) {
    file.close();
    return;
}
file.close();

// print out the element names of all elements that are direct children
// of the outermost element.
QDomElement docElem = doc.documentElement();

QDomNode n = docElem.firstChild();
while(!n.isNull()) {
    QDomElement e = n.toElement(); // try to convert the node to an element.
    if(!e.isNull()) {
        cout << qPrintable(e.tagName()) << '\n'; // the node really is an element.
    }
    n = n.nextSibling();
}

// Here we append a new element to the end of the document
QDomElement elem = doc.createElement("img");
elem.setAttribute("src", "myimage.png");
docElem.appendChild(elem);

Una vez que doc y elem salen del ámbito, se elimina todo el árbol interno que representa el documento XML.

Para crear un documento utilizando DOM utilice código como el siguiente:

QDomDocument doc;
QDomElement root = doc.createElement("MyML");
doc.appendChild(root);

QDomElement tag = doc.createElement("Greeting");
root.appendChild(tag);

QDomText t = doc.createTextNode("Hello World");
tag.appendChild(t);

QString xml = doc.toString();

Para más información sobre el Modelo de Objetos de Documento, consulte las especificaciones básicas de nivel 1 y nivel 2 del Modelo de Objetos de Documento (DOM).

Véase también Aplicación de marcadores DOM.

Documentación de tipos de miembros

[since 6.5] enum class QDomDocument::ParseOption
flags QDomDocument::ParseOptions

Esta enum describe las posibles opciones que se pueden utilizar al analizar un documento XML mediante el método setContent().

ConstanteValorDescripción
QDomDocument::ParseOption::Default0x00No se establecen opciones de análisis.
QDomDocument::ParseOption::UseNamespaceProcessing0x01Se activa el procesamiento de espacios de nombres.
QDomDocument::ParseOption::PreserveSpacingOnlyNodes0x02Se conservan los nodos de texto que sólo contienen caracteres de espaciado.

Este enum se introdujo en Qt 6.5.

El tipo ParseOptions es un typedef para QFlags<ParseOption>. Almacena una combinación OR de valores ParseOption.

Véase también setContent().

Documentación de las funciones miembro

QDomDocument::QDomDocument()

Construye un documento vacío.

[explicit] QDomDocument::QDomDocument(const QDomDocumentType &doctype)

Crea un documento del tipo doctype.

Véase también QDomImplementation::createDocumentType().

[explicit] QDomDocument::QDomDocument(const QString &name)

Crea un documento y establece el nombre del tipo de documento en name.

QDomDocument::QDomDocument(const QDomDocument &document)

Construye una copia de document.

Los datos de la copia son compartidos (copia superficial): si se modifica un nodo, también se modificará el otro. Si quieres hacer una copia profunda, utiliza cloneNode().

[noexcept] QDomDocument::~QDomDocument()

Destruye el objeto y libera sus recursos.

QDomAttr QDomDocument::createAttribute(const QString &name)

Crea un nuevo atributo llamado name que puede insertarse en un elemento, por ejemplo, utilizando QDomElement::setAttributeNode().

Si name no es un nombre XML válido, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también createAttributeNS().

QDomAttr QDomDocument::createAttributeNS(const QString &nsURI, const QString &qName)

Crea un nuevo atributo compatible con el espacio de nombres que puede insertarse en un elemento. El nombre del atributo es qName y el URI del espacio de nombres es nsURI. Esta función también establece QDomNode::prefix() y QDomNode::localName() a los valores apropiados (dependiendo de qName).

Si qName no es un nombre XML válido, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también createAttribute().

QDomCDATASection QDomDocument::createCDATASection(const QString &value)

Crea una nueva sección CDATA para la cadena value que puede insertarse en el documento, por ejemplo, utilizando QDomNode::appendChild().

Si value contiene caracteres que no pueden almacenarse en una sección CDATA, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomComment QDomDocument::createComment(const QString &value)

Crea un nuevo comentario para la cadena value que puede insertarse en el documento, por ejemplo, utilizando QDomNode::appendChild().

Si value contiene caracteres que no pueden almacenarse en un comentario XML, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomDocumentFragment QDomDocument::createDocumentFragment()

Crea un nuevo fragmento de documento, que puede utilizarse para contener partes del documento, por ejemplo, al realizar manipulaciones complejas del árbol del documento.

QDomElement QDomDocument::createElement(const QString &tagName)

Crea un nuevo elemento llamado tagName que puede insertarse en el árbol DOM, por ejemplo, utilizando QDomNode::appendChild().

Si tagName no es un nombre XML válido, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también createElementNS(), QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomElement QDomDocument::createElementNS(const QString &nsURI, const QString &qName)

Crea un nuevo elemento compatible con el espacio de nombres que puede insertarse en el árbol DOM. El nombre del elemento es qName y el URI del espacio de nombres es nsURI. Esta función también establece QDomNode::prefix() y QDomNode::localName() a los valores apropiados (dependiendo de qName).

Si qName es una cadena vacía, devuelve un elemento nulo independientemente de si se establece la política de datos no válidos.

Véase también createElement().

QDomEntityReference QDomDocument::createEntityReference(const QString &name)

Crea una nueva referencia de entidad llamada name que puede insertarse en el documento, por ejemplo, utilizando QDomNode::appendChild().

Si name no es un nombre XML válido, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomProcessingInstruction QDomDocument::createProcessingInstruction(const QString &target, const QString &data)

Crea una nueva instrucción de proceso que puede insertarse en el documento, por ejemplo, utilizando QDomNode::appendChild(). Esta función establece el destino de la instrucción de proceso en target y los datos en data.

Si target no es un nombre XML válido, o si los datos contienen caracteres que no pueden aparecer en una instrucción de proceso, el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomText QDomDocument::createTextNode(const QString &value)

Crea un nodo de texto para la cadena value que puede insertarse en el árbol del documento, por ejemplo, utilizando QDomNode::appendChild().

Si value contiene caracteres que no pueden almacenarse como datos de caracteres de un documento XML (ni siquiera en forma de referencias de caracteres), el comportamiento de esta función se rige por QDomImplementation::InvalidDataPolicy.

Véase también QDomNode::appendChild(), QDomNode::insertBefore() y QDomNode::insertAfter().

QDomDocumentType QDomDocument::doctype() const

Devuelve el tipo de documento de este documento.

QDomElement QDomDocument::documentElement() const

Devuelve el elemento raíz del documento.

QDomElement QDomDocument::elementById(const QString &elementId)

Devuelve el elemento cuyo ID es igual a elementId. Si no se encuentra ningún elemento con el ID, esta función devuelve un null element.

Como las QDomClasses no saben qué atributos son IDs de elementos, esta función devuelve siempre un null element. Esto puede cambiar en una versión futura.

QDomNodeList QDomDocument::elementsByTagName(const QString &tagname) const

Devuelve un QDomNodeList, que contiene todos los elementos del documento con el nombre tagname. El orden de la lista de nodos es el orden en que se encuentran en un recorrido preordenado del árbol de elementos.

Véase también elementsByTagNameNS() y QDomElement::elementsByTagName().

QDomNodeList QDomDocument::elementsByTagNameNS(const QString &nsURI, const QString &localName)

Devuelve un QDomNodeList que contiene todos los elementos del documento con el nombre local localName y un URI de espacio de nombres de nsURI. El orden de la lista de nodos es el orden en que se encuentran en un recorrido preordenado del árbol de elementos.

Véase también elementsByTagName() y QDomElement::elementsByTagNameNS().

QDomImplementation QDomDocument::implementation() const

Devuelve un objeto QDomImplementation.

QDomNode QDomDocument::importNode(const QDomNode &importedNode, bool deep)

Importa el nodo importedNode de otro documento a este documento. importedNode permanece en el documento original; esta función crea una copia que puede utilizarse dentro de este documento.

Esta función devuelve el nodo importado que pertenece a este documento. El nodo devuelto no tiene padre. No es posible importar los nodos QDomDocument y QDomDocumentType. En esos casos esta función devuelve un null node.

Si importedNode es un null node, se devuelve un nodo nulo.

Si deep es verdadero, esta función importa no sólo el nodo importedNode sino todo su subárbol; si es falso, sólo se importa importedNode. El argumento deep no tiene ningún efecto sobre los nodos QDomAttr y QDomEntityReference, ya que los descendientes de los nodos QDomAttr siempre se importan y los de los nodos QDomEntityReference nunca se importan.

El comportamiento de esta función es ligeramente diferente según los tipos de nodos:

Tipo de nodoComportamiento
QDomAttrEl elemento propietario se establece en 0 y la bandera especificada se establece en true en el atributo generado. Siempre se importa todo el subárbol de importedNode para los nodos atributo: deep no tiene ningún efecto.
QDomDocumentLos nodos de documento no pueden importarse.
QDomDocumentFragmentSi deep es verdadero, esta función importa todo el fragmento de documento; en caso contrario, sólo genera un fragmento de documento vacío.
QDomDocumentTypeLos nodos de tipo de documento no pueden importarse.
QDomElementLos atributos para los que QDomAttr::specified() es verdadero también se importan, los demás atributos no se importan. Si deep es verdadero, esta función importa también el subárbol de importedNode; en caso contrario, sólo importa el nodo elemento (y algunos atributos, véase más arriba).
QDomEntityLos nodos de entidad pueden importarse, pero por el momento no hay forma de utilizarlos ya que el tipo de documento es de sólo lectura en el nivel 2 de DOM.
QDomEntityReferenceLos descendientes de los nodos de referencia de entidad nunca se importan: deep no tiene ningún efecto.
QDomNotationLos nodos de notación pueden importarse, pero de momento no hay forma de utilizarlos ya que el tipo de documento es de sólo lectura en el nivel 2 de DOM.
QDomProcessingInstructionEl destino y el valor de la instrucción de proceso se copian en el nuevo nodo.
QDomTextEl texto se copia en el nuevo nodo.
QDomCDATASectionEl texto se copia en el nuevo nodo.
QDomCommentEl texto se copia en el nuevo nodo.

Véase también QDomElement::setAttribute(), QDomNode::insertBefore(), QDomNode::insertAfter(), QDomNode::replaceChild(), QDomNode::removeChild() y QDomNode::appendChild().

QDomNode::NodeType QDomDocument::nodeType() const

Devuelve DocumentNode.

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(const QByteArray &data, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QAnyStringView text, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QIODevice *device, QDomDocument::ParseOptions options = ParseOption::Default)

[since 6.5] QDomDocument::ParseResult QDomDocument::setContent(QXmlStreamReader *reader, QDomDocument::ParseOptions options = ParseOption::Default)

Esta función analiza el documento XML a partir de la matriz de bytes data, la vista de cadena text, el IO device, o el flujo reader y lo establece como contenido del documento. Intenta detectar la codificación del documento, de acuerdo con la especificación XML. Devuelve el resultado del análisis sintáctico en ParseResult, que convierte explícitamente a bool.

Puede utilizar el parámetro options para especificar distintas opciones de análisis sintáctico, por ejemplo, para activar el procesamiento de espacios de nombres, etc.

Por defecto, el procesamiento de espacios de nombres está desactivado. Si está desactivado, el analizador sintáctico no procesa los espacios de nombres cuando lee el archivo XML. Las funciones QDomNode::prefix(), QDomNode::localName() y QDomNode::namespaceURI() devuelven una cadena vacía.

Si se activa el procesamiento de espacios de nombres mediante el análisis sintáctico options, el analizador sintáctico reconoce los espacios de nombres en el archivo XML y establece el nombre del prefijo, el nombre local y el URI del espacio de nombres en los valores adecuados. Las funciones QDomNode::prefix(), QDomNode::localName() y QDomNode::namespaceURI() devuelven una cadena para todos los elementos y atributos y devuelven una cadena vacía si el elemento o atributo no tiene prefijo.

Los nodos de texto formados únicamente por espacios en blanco se eliminan y no aparecen en QDomDocument. Desde Qt 6.5, se puede pasar QDomDocument::ParseOption::PreserveSpacingOnlyNodes como opción de análisis para especificar que se deben conservar los nodos de texto formados únicamente por espacios en blanco.

Las referencias a entidades se tratan como sigue:

  • Se incluyen las referencias a entidades generales internas y a entidades de caracteres que aparecen en el contenido. El resultado es un nodo QDomText con las referencias sustituidas por sus correspondientes valores de entidad.
  • Se incluyen las referencias a entidades paramétricas que aparecen en el subconjunto interno. El resultado es un nodo QDomDocumentType que contiene declaraciones de entidades y notaciones con las referencias sustituidas por sus correspondientes valores de entidad.
  • Cualquier referencia de entidad general analizada que no esté definida en el subconjunto interno y que aparezca en el contenido se representa como un nodo QDomEntityReference.
  • Cualquier referencia de entidad analizada que no esté definida en el subconjunto interno y que aparezca fuera del contenido se sustituye por una cadena vacía.
  • Cualquier referencia de entidad no analizada se sustituye por una cadena vacía.

Nota: La sobrecarga que toma IO device intentará abrirlo en modo de sólo lectura si no está ya abierto. En ese caso, el invocador es responsable de llamar a close. Esto cambiará en Qt 7, que ya no abrirá el IO device. Por lo tanto, las aplicaciones deberían abrir el dispositivo ellas mismas antes de llamar a setContent().

Estas funciones se introdujeron en Qt 6.5.

Ver también ParseResult y ParseOptions.

QByteArray QDomDocument::toByteArray(int indent = 1) const

Convierte el documento analizado de nuevo a su representación textual y devuelve un QByteArray que contiene los datos codificados como UTF-8.

Esta función utiliza indent como cantidad de espacio para sangrar los subelementos.

Véase también toString().

QString QDomDocument::toString(int indent = 1) const

Devuelve el documento analizado a su representación textual.

Esta función utiliza indent como cantidad de espacio para sangrar los subelementos.

Si indent es -1, no se añade ningún espacio en blanco.

QDomDocument &QDomDocument::operator=(const QDomDocument &other)

Asigna other a este documento DOM.

Los datos de la copia son compartidos (copia superficial): si se modifica un nodo, también se modificará el otro. Si desea realizar una copia profunda, utilice cloneNode().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.