QXmlStreamWriter Class
La clase QXmlStreamWriter proporciona un escritor XML 1.0 con una sencilla API de streaming. Más...
| Cabecera: | #include <QXmlStreamWriter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Lista de todos los miembros, incluyendo los heredados
- QXmlStreamWriter es parte de XML Classes.
Nota: Todas las funciones de esta clase son reentrantes.
Tipos Públicos
(since 6.10) enum class | Error { None, IO, Encoding, InvalidCharacter, Custom } |
Propiedades
- autoFormatting : bool
- autoFormattingIndent : int
(since 6.10)stopWritingOnError : bool
Funciones públicas
| QXmlStreamWriter() | |
| QXmlStreamWriter(QByteArray *array) | |
| QXmlStreamWriter(QIODevice *device) | |
| QXmlStreamWriter(QString *string) | |
| ~QXmlStreamWriter() | |
| bool | autoFormatting() const |
| int | autoFormattingIndent() const |
| QIODevice * | device() const |
(since 6.10) QXmlStreamWriter::Error | error() const |
(since 6.10) QString | errorString() const |
| bool | hasError() const |
(since 6.10) void | raiseError(QAnyStringView message) |
| void | setAutoFormatting(bool enable) |
| void | setAutoFormattingIndent(int spacesOrTabs) |
| void | setDevice(QIODevice *device) |
| void | setStopWritingOnError(bool stop) |
| bool | stopWritingOnError() const |
| void | writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value) |
| void | writeAttribute(const QXmlStreamAttribute &attribute) |
| void | writeAttribute(QAnyStringView qualifiedName, QAnyStringView value) |
| void | writeAttributes(const QXmlStreamAttributes &attributes) |
| void | writeCDATA(QAnyStringView text) |
| void | writeCharacters(QAnyStringView text) |
| void | writeComment(QAnyStringView text) |
| void | writeCurrentToken(const QXmlStreamReader &reader) |
| void | writeDTD(QAnyStringView dtd) |
| void | writeDefaultNamespace(QAnyStringView namespaceUri) |
| void | writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name) |
| void | writeEmptyElement(QAnyStringView qualifiedName) |
| void | writeEndDocument() |
| void | writeEndElement() |
| void | writeEntityReference(QAnyStringView name) |
| void | writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {}) |
| void | writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {}) |
| void | writeStartDocument(QAnyStringView version) |
| void | writeStartDocument(QAnyStringView version, bool standalone) |
| void | writeStartDocument() |
| void | writeStartElement(QAnyStringView namespaceUri, QAnyStringView name) |
| void | writeStartElement(QAnyStringView qualifiedName) |
| void | writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text) |
| void | writeTextElement(QAnyStringView qualifiedName, QAnyStringView text) |
Descripción detallada
QXmlStreamWriter es la contraparte de QXmlStreamReader para escribir XML. Es compatible con la especificación XML 1.0 y escribe documentos utilizando sintaxis XML 1.0, reglas de escape y restricciones de validez de caracteres.
Nota: XML 1.1 no está soportado. Aunque las cadenas de versión pueden establecerse manualmente en la salida, los documentos que requieren características específicas de XML 1.1, como caracteres de control adicionales, no pueden producirse con esta clase.
Al igual que su clase relacionada, opera en un QIODevice especificado con setDevice(). La API es simple y directa: para cada token o evento XML que desee escribir, el escritor proporciona una función especializada.
Inicie un documento con writeStartDocument() y termínelo con writeEndDocument(). Esto cerrará implícitamente todas las etiquetas abiertas restantes.
Las etiquetas de elementos se abren con writeStartElement() seguido de writeAttribute() o writeAttributes(), el contenido del elemento, y luego writeEndElement(). Se puede utilizar una forma más corta writeEmptyElement() para escribir elementos vacíos, seguida de writeAttributes().
El contenido de los elementos está formado por caracteres, referencias a entidades o elementos anidados. Se escribe con writeCharacters(), que también se encarga de escapar todos los caracteres y secuencias de caracteres prohibidos, writeEntityReference(), o llamadas posteriores a writeStartElement(). El método writeTextElement() puede utilizarse para escribir elementos terminales que sólo contengan texto.
El siguiente fragmento de código abreviado muestra el uso básico de la clase para escribir XML formateado con sangría:
QXmlStreamWriter stream(&output); stream.setAutoFormatting(true); stream.writeStartDocument(); ... stream.writeStartElement("bookmark"); stream.writeAttribute("href", "http://qt-project.org/"); stream.writeTextElement("title", "Qt Project"); stream.writeEndElement(); // bookmark ... stream.writeEndDocument();
QXmlStreamWriter se encarga de prefijar los espacios de nombres, todo lo que tienes que hacer es especificar el namespaceUri al escribir elementos o atributos. Si debes ajustarte a ciertos prefijos, puedes forzar al escritor a utilizarlos declarando los espacios de nombres manualmente con writeNamespace() o writeDefaultNamespace(). Alternativamente, puede omitir el soporte de espacios de nombres del escritor de flujos y utilizar métodos sobrecargados que tomen un nombre cualificado en su lugar. El espacio de nombres http://www.w3.org/XML/1998/namespace es implícito y se asigna al prefijo xml.
El escritor de flujos puede formatear automáticamente los datos XML generados añadiendo saltos de línea y sangría a las secciones vacías entre elementos, haciendo los datos XML más legibles para los humanos y más fáciles de trabajar para la mayoría de los sistemas de gestión de código fuente. Esta función puede activarse con la propiedad autoFormatting y personalizarse con la propiedad autoFormattingIndent.
Otras funciones son writeCDATA(), writeComment(), writeProcessingInstruction() y writeDTD(). La función writeCurrentToken() permite encadenar flujos XML.
QXmlStreamWriter siempre codifica XML en UTF-8.
Si se produce un error durante la escritura, hasError() devolverá true. Sin embargo, por defecto, los datos que ya estaban almacenados en el búfer en el momento en que se produjo el error, o los datos escritos desde dentro de la misma operación, pueden seguir escribiéndose en el dispositivo subyacente. Esto se aplica a Error::Encoding, Error::InvalidCharacter, y Error::Custom levantado por el usuario. Para evitar esto y asegurarse de que no se escribe ningún dato después de un error, utilice la propiedad stopWritingOnError. Cuando esta propiedad está activada, el primer error detiene la salida inmediatamente y el escritor ignora todas las operaciones de escritura posteriores. Las aplicaciones deben tratar el estado de error como terminal y evitar el uso posterior del escritor después de un error.
El ejemplo de marcadores QXmlStream ilustra cómo utilizar un escritor de flujo para escribir un archivo de marcadores XML (XBEL) que fue leído previamente por QXmlStreamReader.
Documentación de tipos de miembros
[since 6.10] enum class QXmlStreamWriter::Error
Este enum especifica los diferentes casos de error que pueden producirse al escribir XML con QXmlStreamWriter.
| Constante | Valor | Descripción |
|---|---|---|
QXmlStreamWriter::Error::None | 0 | No se ha producido ningún error. |
QXmlStreamWriter::Error::IO | 1 | Se ha producido un error de E/S al escribir en el dispositivo. |
QXmlStreamWriter::Error::Encoding | 2 | Se ha producido un error de codificación al convertir caracteres al formato de salida. |
QXmlStreamWriter::Error::InvalidCharacter | 3 | Al escribir se ha encontrado un carácter no permitido en XML 1.0. |
QXmlStreamWriter::Error::Custom | 4 | Se ha producido un error personalizado con raiseError(). |
Este enum se introdujo en Qt 6.10.
Documentación de propiedades
autoFormatting : bool
Esta propiedad contiene la bandera de autoformateo del escritor de flujos.
Esta propiedad controla si el escritor de flujo formatea o no automáticamente los datos XML generados. Si está habilitada, el escritor añade automáticamente saltos de línea y sangría a las secciones vacías entre elementos (espacios en blanco ignorables). El objetivo principal del autoformateo es dividir los datos en varias líneas y aumentar la legibilidad para un lector humano. La profundidad de la sangría puede controlarse mediante la propiedad autoFormattingIndent.
Por defecto, el autoformateo está desactivado.
Funciones de acceso:
| bool | autoFormatting() const |
| void | setAutoFormatting(bool enable) |
autoFormattingIndent : int
Esta propiedad contiene el número de espacios o tabuladores utilizados para la sangría cuando el autoformateo está activado. Los números positivos indican espacios, los negativos tabuladores.
La sangría por defecto es 4.
Funciones de acceso:
| int | autoFormattingIndent() const |
| void | setAutoFormattingIndent(int spacesOrTabs) |
Véase también autoFormatting.
[since 6.10] stopWritingOnError : bool
Esta propiedad contiene la opción de detener la escritura en el dispositivo después de encontrar un error.
Si esta propiedad se establece en true, el escritor deja de escribir inmediatamente al encontrar cualquier error e ignora todas las operaciones de escritura posteriores. Cuando esta propiedad se establece en false, el escritor puede continuar escribiendo después de un error, omitiendo la escritura no válida pero permitiendo la salida posterior.
Tenga en cuenta que esto incluye Error::InvalidCharacter, Error::Encoding, y Error::Custom. Error::IO siempre se considera terminal y deja de escribir independientemente de este ajuste.
El valor por defecto es false.
Esta propiedad se introdujo en Qt 6.10.
Funciones de acceso:
| bool | stopWritingOnError() const |
| void | setStopWritingOnError(bool stop) |
Documentación de funciones miembro
QXmlStreamWriter::QXmlStreamWriter()
Construye un escritor de flujo.
Véase también setDevice().
[explicit] QXmlStreamWriter::QXmlStreamWriter(QByteArray *array)
Construye un stream writer que escribe en array. Esto es lo mismo que crear un escritor xml que opera en un dispositivo QBuffer que a su vez opera en array.
[explicit] QXmlStreamWriter::QXmlStreamWriter(QIODevice *device)
Construye un escritor de flujo que escribe en device;
[explicit] QXmlStreamWriter::QXmlStreamWriter(QString *string)
Construye un escritor de flujo que escribe en string.
[noexcept] QXmlStreamWriter::~QXmlStreamWriter()
Destructor.
bool QXmlStreamWriter::autoFormatting() const
Devuelve true si el autoformateo está activado, en caso contrario false.
Nota: Función Getter para la propiedad autoFormatting.
Véase también setAutoFormatting().
QIODevice *QXmlStreamWriter::device() const
Devuelve el dispositivo actual asociado a QXmlStreamWriter, o nullptr si no se ha asignado ningún dispositivo.
Véase también setDevice().
[since 6.10] QXmlStreamWriter::Error QXmlStreamWriter::error() const
Devuelve el estado de error actual del escritor.
Si no se ha producido ningún error, esta función devuelve QXmlStreamWriter::Error::None.
Esta función se introdujo en Qt 6.10.
Véase también errorString(), raiseError(), y hasError().
[since 6.10] QString QXmlStreamWriter::errorString() const
Si se ha producido un error, devuelve el mensaje de error asociado.
El mensaje de error es establecido internamente por QXmlStreamWriter o proporcionado por el usuario a través de raiseError(). Si no se ha producido ningún error, esta función devuelve una cadena nula.
Esta función se introdujo en Qt 6.10.
Véase también error(), raiseError() y hasError().
bool QXmlStreamWriter::hasError() const
Devuelve true si se ha producido un error al intentar escribir datos.
Si el error es Error::IO, las subsiguientes escrituras en el subyacente QIODevice fallarán. En otros casos podrían escribirse datos malformados en el documento.
El estado de error nunca se restablece. Las escrituras que se produzcan después de que ocurra el error pueden ser ignoradas, incluso si se borra el estado de error.
Véase también error(), errorString(), y raiseError().
[since 6.10] void QXmlStreamWriter::raiseError(QAnyStringView message)
Genera un error personalizado con la dirección message.
Esta función sirve para indicar manualmente que se ha producido un error durante la escritura, como un fallo de validación a nivel de aplicación.
Esta función se introdujo en Qt 6.10.
Véase también errorString(), error(), y hasError().
void QXmlStreamWriter::setAutoFormatting(bool enable)
Activa el autoformateo si enable es true, en caso contrario lo desactiva.
El valor por defecto es false.
Nota: Función Setter para la propiedad autoFormatting.
Véase también autoFormatting().
void QXmlStreamWriter::setDevice(QIODevice *device)
Establece el dispositivo actual en device. Si desea que el flujo escriba en QByteArray, puede crear un dispositivo QBuffer.
Véase también device().
void QXmlStreamWriter::writeAttribute(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView value)
Escribe un atributo con name y value, prefijado para el namespaceUri especificado. Si el espacio de nombres aún no ha sido declarado, QXmlStreamWriter generará una declaración de espacio de nombres para él.
Esta función sólo puede invocarse después de writeStartElement() antes de que se escriba cualquier contenido, o después de writeEmptyElement().
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeAttribute(const QXmlStreamAttribute &attribute)
Escribe el contenido de attribute.
Esta función sólo puede invocarse después de writeStartElement() antes de que se escriba cualquier contenido, o después de writeEmptyElement().
Se trata de una función sobrecargada.
void QXmlStreamWriter::writeAttribute(QAnyStringView qualifiedName, QAnyStringView value)
Escribe un atributo con qualifiedName y value.
Esta función sólo puede invocarse después de writeStartElement() antes de que se escriba cualquier contenido, o después de writeEmptyElement().
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Se trata de una función sobrecargada.
void QXmlStreamWriter::writeAttributes(const QXmlStreamAttributes &attributes)
Escribe el vector de atributos attributes. Si un espacio de nombres referenciado en un atributo no ha sido declarado todavía, QXmlStreamWriter generará una declaración de espacio de nombres para él.
Esta función sólo puede invocarse después de writeStartElement() antes de que se escriba cualquier contenido, o después de writeEmptyElement().
Véase también writeAttribute() y writeNamespace().
void QXmlStreamWriter::writeCDATA(QAnyStringView text)
Escribe text como sección CDATA. Si text contiene la secuencia de caracteres prohibida "]]>", se divide en diferentes secciones CDATA.
Esta función existe principalmente como complemento. Normalmente no debería ser necesario utilizarla, ya que writeCharacters() escapa automáticamente todos los caracteres no contenidos.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeCharacters(QAnyStringView text)
Escribe text. Los caracteres "<", "&" y """ se escapan como referencias de entidad "<", "& y """. Para evitar la secuencia prohibida "]]>", ">" también se escapa como ">".
Nota: En las versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Véase también writeEntityReference().
void QXmlStreamWriter::writeComment(QAnyStringView text)
Escribe text como comentario XML, donde text no debe contener la secuencia prohibida -- ni terminar con -. Tenga en cuenta que XML no proporciona ninguna forma de escapar - en un comentario.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)
Escribe el estado actual de reader. Se admiten todos los estados válidos posibles.
El propósito de esta función es soportar el procesamiento encadenado de datos XML.
Véase también QXmlStreamReader::tokenType().
void QXmlStreamWriter::writeDTD(QAnyStringView dtd)
Escribe una sección DTD. El dtd representa toda la producción doctypedecl de la especificación XML 1.0.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeDefaultNamespace(QAnyStringView namespaceUri)
Escribe una declaración de espacio de nombres por defecto para namespaceUri.
Si se ha llamado a writeStartElement() o writeEmptyElement(), la declaración se aplica al elemento actual; en caso contrario, se aplica al siguiente elemento hijo.
Nótese que los espacios de nombres http://www.w3.org/XML/1998/namespace (ligado a xmlns) y http://www.w3.org/2000/xmlns/ (ligado a xml) por definición no pueden ser declarados por defecto.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeEmptyElement(QAnyStringView namespaceUri, QAnyStringView name)
Escribe un elemento vacío con name, prefijado para el namespaceUri especificado. Si el espacio de nombres no ha sido declarado, QXmlStreamWriter generará una declaración de espacio de nombres para él. Las siguientes llamadas a writeAttribute() añadirán atributos a este elemento.
Nota: En las versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Véase también writeNamespace().
void QXmlStreamWriter::writeEmptyElement(QAnyStringView qualifiedName)
Escribe un elemento vacío con el nombre cualificado qualifiedName. Las siguientes llamadas a writeAttribute() añadirán atributos a este elemento.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Se trata de una función sobrecargada.
void QXmlStreamWriter::writeEndDocument()
Cierra todos los elementos de inicio abiertos y escribe una nueva línea.
Véase también writeStartDocument().
void QXmlStreamWriter::writeEndElement()
Cierra el elemento de inicio anterior.
Véase también writeStartElement().
void QXmlStreamWriter::writeEntityReference(QAnyStringView name)
Escribe la referencia de entidad name en el flujo, como "&name;".
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeNamespace(QAnyStringView namespaceUri, QAnyStringView prefix = {})
Escribe una declaración de espacio de nombres para namespaceUri con prefix. Si prefix está vacío, QXmlStreamWriter asigna un prefijo único consistente en la letra 'n' seguida de un número.
Si se ha llamado a writeStartElement() o writeEmptyElement(), la declaración se aplica al elemento actual; en caso contrario, se aplica al siguiente elemento hijo.
Tenga en cuenta que el prefijo xml está predefinido y reservado para http://www.w3.org/XML/1998/namespace, que a su vez no puede vincularse a ningún otro prefijo. El prefijo xmlns y su URI http://www.w3.org/2000/xmlns/ se utilizan para el propio mecanismo del espacio de nombres y, por tanto, están completamente prohibidos en las declaraciones.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeProcessingInstruction(QAnyStringView target, QAnyStringView data = {})
Escribe una instrucción de procesamiento XML con target y data, donde data no debe contener la secuencia "?>".
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeStartDocument(QAnyStringView version)
Escribe un inicio de documento con el número de versión XML version.
Nota: Esta función no valida la cadena de versión y permite establecerla manualmente. Sin embargo, QXmlStreamWriter sólo admite XML 1.0. Establecer una cadena de versión distinta de "1.0" no cambia el comportamiento del escritor ni las reglas de escape. Es responsabilidad de la persona que llama asegurar la consistencia entre la versión declarada y el contenido real.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Véase también writeEndDocument().
void QXmlStreamWriter::writeStartDocument(QAnyStringView version, bool standalone)
Escribe un inicio de documento con el número de versión XML version y un atributo independiente standalone.
Nota: Esta función no valida la cadena de versión y permite establecerla manualmente. Sin embargo, QXmlStreamWriter sólo admite XML 1.0. Establecer una cadena de versión distinta de "1.0" no cambia el comportamiento del escritor ni las reglas de escape. Es responsabilidad de la persona que llama asegurar la consistencia entre la versión declarada y el contenido real.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Véase también writeEndDocument().
void QXmlStreamWriter::writeStartDocument()
Escribe un inicio de documento con el número de versión XML "1.0".
Se trata de una función sobrecargada.
Véase también writeEndDocument().
void QXmlStreamWriter::writeStartElement(QAnyStringView namespaceUri, QAnyStringView name)
Escribe un elemento de inicio con name, prefijado para el namespaceUri especificado. Si el espacio de nombres aún no ha sido declarado, QXmlStreamWriter generará una declaración de espacio de nombres para él. Las siguientes llamadas a writeAttribute() añadirán atributos a este elemento.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Véase también writeNamespace(), writeEndElement(), y writeEmptyElement().
void QXmlStreamWriter::writeStartElement(QAnyStringView qualifiedName)
Escribe un elemento de inicio con qualifiedName. Las siguientes llamadas a writeAttribute() añadirán atributos a este elemento.
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Se trata de una función sobrecargada.
Véase también writeEndElement() y writeEmptyElement().
void QXmlStreamWriter::writeTextElement(QAnyStringView namespaceUri, QAnyStringView name, QAnyStringView text)
Escribe un elemento de texto con name, prefijo para el espacio de nombres especificado namespaceUri, y text. Si el espacio de nombres no ha sido declarado, QXmlStreamWriter generará una declaración de espacio de nombres para él.
Esta es una función de conveniencia equivalente a:
stream.writeStartElement(namespaceUri, name); stream.writeCharacters(text); stream.writeEndElement();
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
void QXmlStreamWriter::writeTextElement(QAnyStringView qualifiedName, QAnyStringView text)
Escribe un elemento de texto con qualifiedName y text.
Esta es una función de conveniencia equivalente a:
stream.writeStartElement(qualifiedName); stream.writeCharacters(text); stream.writeEndElement();
Nota: En versiones de Qt anteriores a la 6.5, esta función tomaba QString, no QAnyStringView.
Se trata de una función sobrecargada.
© 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.