En esta página

Los cambios introducidos en Qt XML

Qt 6 son el resultado del esfuerzo consciente por hacer el framework más eficiente y fácil de usar.

Intentamos mantener la compatibilidad binaria y de código fuente de todas las API públicas en cada versión. Pero algunos cambios eran inevitables en un esfuerzo por hacer de Qt un mejor framework y alinearlo con los estándares modernos.

Qt 6 aplica las reglas XML 1.0 de forma más estricta que Qt 5. En Qt 5, el analizador XML era más indulgente, permitiendo ciertas construcciones que no cumplían con la especificación XML 1.0. Qt 6 corrige este comportamiento, permitiendo el uso de XML 1.0. Qt 6 corrige este comportamiento, asegurando que el manejo de XML sigue el estándar correctamente. Si su aplicación se basa en un comportamiento que se permitía incorrectamente en Qt 5, es posible que tenga que ajustar sus documentos XML o la lógica de procesamiento en consecuencia.

Para más detalles sobre las reglas XML 1.0, consulte la especificación oficial XML del W3C: Extensible Markup Language (XML) 1.0 (Quinta Edición)

En este tema resumimos esos cambios en Qt XML, y proporcionamos orientación para manejarlos.

Analizador sintáctico Simple API for XML (SAX)

Se han eliminado todas las clases SAX de Qt XML. Utilice QXmlStreamReader para leer archivos XML. A continuación se indican algunos pasos sencillos para adaptar su código actual a QXmlStreamReader:

Por ejemplo, si tiene código como

QFile *file = new QFile(...);
QXmlInputSource *source = new QXmlInputSource(file);

Handler *handler = new Handler;

QXmlSimpleReader xmlReader;
xmlReader.setErrorHandler(handler);
xmlReader.setContentHandler(handler);

if (xmlReader.parse(source)) {
    ... // do processing
} else {
    ... // do error handling
}

puedes reescribirlo como

QFile file = ...;
QXmlStreamReader reader(&file);

while (!reader.atEnd()) {
    reader.readNext();
    ... // do processing
}
if (reader.hasError()) {
    ... // do error handling
}

QDom y QDomDocument

Como las clases SAX han sido eliminadas de Qt XML, QDomDocument ha sido reimplementado usando QXmlStreamReader. Esto provoca algunos cambios de comportamiento:

  • Los valores de los atributos se normalizarán. Por ejemplo, <tag attr=" a \n b " /> es equivalente a <tag attr="a b"/>.
  • Ya no se permiten nombres de atributo idénticos. Esto significa que los atributos de un elemento deben tener nombres únicos.
  • Ya no se permiten los prefijos de espacio de nombres no declarados.

Para más información, consulte: Normalización de valores de atributo en XML 1.0

Caracteres de control

En Qt 6, los caracteres de control como U+0000-U+001F, U+007F, y U+0080-U+009F se rechazan ahora correctamente según las reglas de XML 1.0. Se permitían incorrectamente en Qt 5. Antes de usar XML con Qt6 asegúrese de que sus documentos XML contienen sólo caracteres válidos conformes con XML 1.0. Si son necesarios caracteres de control, codifíquelos utilizando un formato seguro para texto.

Para más información, consulte: Caracteres en XML 1.0

Entidades HTML en XML

En Qt 6, las entidades HTML ya no son válidas a menos que se declaren explícitamente en una Definición de Tipo de Documento (DTD). En Qt 5, ciertas entidades específicas de HTML (por ejemplo, &nbsp;) estaban permitidas, incluso sin declaración. Para garantizar la compatibilidad en Qt 6 utilice referencias numéricas de caracteres, defina las entidades requeridas en una DTD o, si su contenido depende de entidades HTML, procese el XML como HTML en su lugar.

Para más detalles, véase: Codificación de caracteres en entidades XML 1.0

Nodos de texto que sólo contienen espacios

Por defecto, los nodos de texto que sólo contienen caracteres de espaciado se eliminan y no aparecen en QDomDocument. La forma que tenía Qt 5 de cambiar este comportamiento era usar la sobrecarga QDomDocument::setContent(), que permitía proporcionar QXmlReader. Esa sobrecarga fue eliminada en Qt 6.0, pero desde Qt 6.5, puedes pasar QDomDocument::ParseOption::PreserveSpacingOnlyNodes como una opción de análisis, para especificar que los nodos de texto con espaciado deben ser preservados.

Si utiliza QDomDocument y confía en cualquiera de estas opciones, deberá actualizar su código y sus documentos XML en consecuencia.

Biblioteca de compatibilidad con Qt Core5

Si tu aplicación o librería no puede ser portada en este momento, el QXmlSimpleReader y las clases relacionadas todavía existen en Qt5Compat para mantener las viejas bases de código funcionando. Si quieres seguir usando esas clases SAX, necesitas enlazar con el nuevo módulo Qt5Compat y añadir esta línea a tu archivo qmake .pro:

QT += core5compat

En caso de que ya hayas portado tu aplicación o librería al sistema de construcción cmake, añade lo siguiente a tu CMakeList.txt:

PUBLIC_LIBRARIES
    Qt::Core5Compat

© 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.