Sur cette page

QXmlStreamEntityResolver Class

La classe `QXmlStreamEntityResolver` fournit un résolveur d'entités pour un ` QXmlStreamReader`. En savoir plus...

En-tête : #include <QXmlStreamEntityResolver>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

QXmlStreamEntityResolver()
virtual ~QXmlStreamEntityResolver()
virtual QString resolveUndeclaredEntity(const QString &name)

Description détaillée

À utiliser pour indiquer à QXmlStreamReader comment développer les entités non declared in the internal-set of the DTD.

Considérations relatives à la sécurité

Cycles d'entités

Vous devez veiller à éviter que les entités ne forment des cycles, car QXmlStreamReader ne détecte et ne rejette les cycles que dans entities defined in the DTD, et non dans les entités dérivées d’une implémentation de l’interface QXmlStreamEntityResolver.

Il s’agit d’une choix de conception : QXmlStreamReader confie cette tâche à l’implémentation d’un QXmlStreamEntityResolver concret. Pour les mappages statiques, tels que les définitions d’entités XML pour les caractères, cela est garanti de manière triviale ; par conséquent, effectuer un suivi en arrière-plan ne ferait que ralentir le système pour tout le monde.

Les choses se compliquent lorsque vous lisez des définitions d’entités à partir d’une entrée externe, y compris des sources non fiables. Dans ce cas, votre implémentation doit s’assurer que les expansions qu’elle utilise en entrée ne contiennent pas de cycles. Il s’agit d’une opération graphique simple qui peut être implémentée en temps et en espace linéaires et qui peut être effectuée en amont au moment du chargement, de sorte qu’elle n’affecte pas les performances de ` resolveUndeclaredEntity()`.

Limite d’expansion des entités

Pour l'instant, les entités résolues par cette classe ne sont pas prises en compte dans le comptage d'QXmlStreamReader::entityExpansionLimit(). Cela pourrait changer dans les futures versions de Qt.

Pour l’instant, vous devez définir vous-même une limite maximale d’expansion si vous lisez des définitions d’entités à partir d’une source externe. Une fois la détection des cycles effectuée, le calcul du chemin le plus long est une opération simple sur les graphes qui peut être implémentée en temps et en espace linéaires et qui peut être effectuée à l’avance lors du chargement ; elle n’affecte donc pas non plus les performances de la fonction ` resolveUndeclaredEntity()`.

Voir également QXmlStreamReader::setEntityResolver().

Documentation des fonctions membres

[constexpr noexcept default] QXmlStreamEntityResolver::QXmlStreamEntityResolver()

Construit par défaut une instance de ` QXmlStreamEntityResolver`.

[virtual noexcept] QXmlStreamEntityResolver::~QXmlStreamEntityResolver()

Supprime le résolveur d'entités.

[virtual] QString QXmlStreamEntityResolver::resolveUndeclaredEntity(const QString &name)

Réimplémentez cette fonction pour résoudre l'entité non déclarée name et renvoyer son texte de remplacement. Si l'entité est inconnue du résolveur d'entités, renvoyez un null string: QString(). Cela déclenchera une erreur dans QXmlStreamreader. Une chaîne vide, mais non nulle, est considérée comme une expansion valide de l'entité et ne provoquera pas d'erreur.

L'implémentation par défaut renvoie toujours QString().

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