Modifications apportées à Qt XML
Qt 6 sont le résultat d'un effort délibéré visant à rendre le framework plus efficace et plus facile à utiliser.
Nous nous efforçons de maintenir la compatibilité binaire et source pour toutes les API publiques à chaque version. Cependant, certaines modifications étaient inévitables afin d’améliorer Qt et de l’aligner sur les normes modernes.
Qt 6 applique les règles XML 1.0 de manière plus stricte que Qt 5. Dans Qt 5, l'analyseur XML était plus souple, autorisant certaines constructions non conformes à la spécification XML 1.0. Qt 6 corrige ce comportement, garantissant ainsi que le traitement du XML respecte correctement la norme. Si votre application repose sur un comportement qui était incorrectement autorisé dans Qt 5, vous devrez peut-être adapter vos documents XML ou votre logique de traitement en conséquence.
Pour plus de détails sur les règles XML 1.0, consultez la spécification XML officielle du W3C : Extensible Markup Language (XML) 1.0 (cinquième édition)
Dans cette rubrique, nous résumons ces modifications apportées à l’ Qt XML, et fournissons des conseils pour les prendre en compte.
Analyseur Simple API for XML (SAX)
Toutes les classes SAX ont été supprimées d’ Qt XML. Utilisez QXmlStreamReader pour lire les fichiers XML. Voici quelques étapes simples pour porter votre code actuel vers QXmlStreamReader:
Par exemple, si vous avez un code tel que
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
}vous pouvez le réécrire ainsi :
QFile file = ...;
QXmlStreamReader reader(&file);
while (!reader.atEnd()) {
reader.readNext();
... // do processing
}
if (reader.hasError()) {
... // do error handling
}QDom et QDomDocument
Les classes SAX ayant été supprimées de Qt XML, QDomDocument a été réimplémenté à l’aide de QXmlStreamReader. Cela entraîne quelques changements de comportement :
- Les valeurs d’attributs seront normalisées. Par exemple, `
<tag attr=" a \n b " />` est équivalent à `<tag attr="a b"/>`. - Les noms d’attributs qualifiés identiques ne sont plus autorisés. Cela signifie que les attributs d’un élément doivent avoir des noms uniques.
- Les préfixes d'espace de noms non déclarés ne sont plus autorisés.
Pour plus de détails, voir : Normalisation des valeurs d'attributs dans XML 1.0
Caractères de contrôle
Dans Qt 6, les caractères de contrôle tels que U+0000—U+001F, U+007F et U+0080—U+009F sont désormais correctement rejetés conformément aux règles XML 1.0. Ils étaient autorisés à tort dans Qt 5. Avant d’utiliser XML avec Qt 6, assurez-vous que vos documents XML ne contiennent que des caractères valides conformes à la spécification XML 1.0. Si des caractères de contrôle sont nécessaires, encodez-les en utilisant un format compatible avec le texte.
Pour plus de détails, consultez : Caractères dans XML 1.0
Entités HTML dans XML
Dans Qt 6, les entités HTML ne sont plus valides à moins d’être explicitement déclarées dans une définition de type de document (DTD). Dans Qt 5, certaines entités spécifiques au HTML (par exemple, ) étaient autorisées, même sans déclaration. Pour garantir la compatibilité dans Qt 6, utilisez des références de caractères numériques, définissez les entités requises dans une DTD ou, si votre contenu repose sur des entités HTML, traitez plutôt le XML comme du HTML.
Pour plus de détails, voir : Encodage des caractères dans les entités en XML 1.0
Nœuds de texte contenant uniquement des espaces
Par défaut, les nœuds de texte ne contenant que des caractères d’espacement sont supprimés et n’apparaîtront pas dans le fichier QDomDocument. Dans Qt 5, pour modifier ce comportement, on utilisait la surcharge de la méthode QDomDocument::setContent() qui permettait de fournir un objet QXmlReader. Cette surcharge a été supprimée dans Qt 6.0, mais depuis Qt 6.5, vous pouvez passer ` QDomDocument::ParseOption::PreserveSpacingOnlyNodes ` en tant qu’option d’analyse pour spécifier que les nœuds de texte ne contenant que des espaces doivent être conservés.
Si vous utilisez QDomDocument et que vous vous appuyez sur l’une de ces fonctionnalités, vous devez mettre à jour votre code et vos documents XML en conséquence.
Bibliothèque de compatibilité Qt Core5
Si votre application ou votre bibliothèque ne peut pas être portée pour le moment, les classes ` QXmlSimpleReader ` et les classes associées existent toujours dans Qt5Compat afin de garantir le fonctionnement des anciennes bases de code. Si vous souhaitez continuer à utiliser ces classes SAX, vous devez lier votre projet au nouveau module Qt5Compat et ajouter cette ligne à votre fichier d'.pro qmake:
QT += core5compatSi vous avez déjà porté votre application ou votre bibliothèque vers le système de compilation CMake, ajoutez ce qui suit à votre fichier ` 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.