Sur cette page

Changements apportés à Qt XML

Qt 6 est le résultat d'un effort conscient pour rendre le cadre plus efficace et plus facile à utiliser.

Nous essayons de maintenir la compatibilité binaire et source pour toutes les API publiques dans chaque version. Mais certains changements étaient inévitables dans un effort pour faire de Qt un meilleur framework et s'aligner sur les standards modernes.

Qt 6 applique les règles XML 1.0 plus strictement que Qt 5. Dans Qt 5, l'analyseur XML était plus indulgent, permettant certaines constructions qui n'étaient pas conformes à la spécification XML 1.0. Qt 6 corrige ce comportement, garantissant que la gestion du XML suit correctement la norme. Si votre application repose sur un comportement qui n'était pas autorisé correctement dans Qt XML 5, vous devrez peut-être ajuster vos documents XML ou votre logique de traitement en conséquence.

Pour plus de détails sur les règles XML 1.0, voir la spécification XML officielle du W3C : Langage de balisage extensible (XML) 1.0 (cinquième édition)

Dans cette rubrique, nous résumons ces changements dans Qt XML, et fournissons des conseils pour les gérer.

Analyseur Simple API for XML (SAX)

Toutes les classes SAX ont été supprimées de Qt XML. Utilisez QXmlStreamReader pour lire les fichiers XML. Voici quelques étapes simples pour porter votre code actuel sur QXmlStreamReader:

Par exemple, si vous avez un code comme

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 en

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

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

QDom et QDomDocument

Comme les classes SAX ont été supprimées de Qt XML, QDomDocument a été réimplémenté en utilisant QXmlStreamReader. Cela entraîne quelques changements de comportement :

  • Les valeurs des 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 maintenant correctement rejetés selon les règles de XML 1.0. Avant d'utiliser XML avec Qt6, assurez-vous que vos documents XML ne contiennent que des caractères valides conformes à XML 1.0. Si des caractères de contrôle sont nécessaires, encodez-les en utilisant un format sûr pour le texte.

Pour plus de détails, voir : Caractères dans XML 1.0

Entités HTML en 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, &nbsp;) étaient autorisées, même sans déclaration. Pour assurer 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 contenant uniquement des caractères d'espacement sont supprimés et n'apparaissent pas dans QDomDocument. La façon dont Qt 5 modifiait ce comportement consistait à utiliser la surcharge QDomDocument::setContent() qui permettait de fournir un QXmlReader. Cette surcharge a été supprimée dans Qt 6.0, mais depuis Qt 6.5, vous pouvez passer QDomDocument::ParseOption::PreserveSpacingOnlyNodes comme option d'analyse, pour spécifier que les nœuds de texte avec espacement seulement doivent être préservés.

Si vous utilisez QDomDocument et que vous vous appuyez sur l'un de ces éléments, 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 maintenant, le site QXmlSimpleReader et les classes associées existent toujours dans Qt5Compat pour permettre aux anciennes bases de code de continuer à fonctionner. Si vous souhaitez continuer à utiliser ces classes SAX, vous devez établir un lien avec le nouveau module Qt5Compat et ajouter cette ligne à votre fichier qmake .pro:

QT += core5compat

Si vous avez déjà porté votre application ou votre bibliothèque vers le système de construction 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.