QXmlSimpleReader Class
La classe QXmlSimpleReader fournit une implémentation d'un analyseur XML simple. En savoir plus...
| En-tête : | #include <QXmlSimpleReader> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core5Compat) target_link_libraries(mytarget PRIVATE Qt6::Core5Compat) |
| qmake : | QT += core5compat |
| Hérite de : | QXmlReader |
Avertissement : cette classe n'est pas réentrante.
Fonctions publiques
| QXmlSimpleReader() | |
| virtual | ~QXmlSimpleReader() |
| virtual bool | parse(const QXmlInputSource *input, bool incremental) |
| virtual bool | parseContinue() |
Fonctions publiques réimplémentées
| virtual QXmlDTDHandler * | DTDHandler() const override |
| virtual QXmlContentHandler * | contentHandler() const override |
| virtual QXmlDeclHandler * | declHandler() const override |
| virtual QXmlEntityResolver * | entityResolver() const override |
| virtual QXmlErrorHandler * | errorHandler() const override |
| virtual bool | feature(const QString &name, bool *ok = nullptr) const override |
| virtual bool | hasFeature(const QString &name) const override |
| virtual bool | hasProperty(const QString &name) const override |
| virtual QXmlLexicalHandler * | lexicalHandler() const override |
| virtual bool | parse(const QXmlInputSource &input) override |
| virtual bool | parse(const QXmlInputSource *input) override |
| virtual void * | property(const QString &name, bool *ok = nullptr) const override |
| virtual void | setContentHandler(QXmlContentHandler *handler) override |
| virtual void | setDTDHandler(QXmlDTDHandler *handler) override |
| virtual void | setDeclHandler(QXmlDeclHandler *handler) override |
| virtual void | setEntityResolver(QXmlEntityResolver *handler) override |
| virtual void | setErrorHandler(QXmlErrorHandler *handler) override |
| virtual void | setFeature(const QString &name, bool enable) override |
| virtual void | setLexicalHandler(QXmlLexicalHandler *handler) override |
| virtual void | setProperty(const QString &name, void *value) override |
Description détaillée
Ce lecteur XML convient à un large éventail d’applications. Il est capable d’analyser du code XML bien formé et peut signaler les espaces de noms des éléments à un gestionnaire de contenu ; toutefois, il n’analyse aucune entité externe. Pour des raisons historiques, la normalisation des valeurs d’attributs et la gestion des fins de ligne, telles que décrites dans la spécification XML 1.0, ne sont pas effectuées.
Le modèle d'utilisation le plus simple pour cette classe consiste à créer une instance de lecteur, à définir une source d'entrée, à spécifier les gestionnaires à utiliser par le lecteur, puis à analyser les données.
Par exemple, nous pourrions utiliser un ` QFile ` pour fournir l’entrée. Ici, nous créons un lecteur et définissons une source d’entrée qui sera utilisée par celui-ci :
QXmlSimpleReader xmlReader;
QXmlInputSource *source = new QXmlInputSource(file);Un gestionnaire nous permet d’effectuer des actions lorsque le lecteur rencontre certains types de contenu ou si des erreurs sont détectées dans les données d’entrée. Il faut indiquer au lecteur quel gestionnaire utiliser pour chaque type d’événement. Pour de nombreuses applications courantes, nous pouvons créer un gestionnaire personnalisé en sous-classant ` QXmlDefaultHandler` et l’utiliser pour gérer à la fois les événements d’erreur et de contenu :
Handler *handler = new Handler;
xmlReader.setContentHandler(handler);
xmlReader.setErrorHandler(handler);Si vous ne définissez pas au moins les gestionnaires de contenu et d’erreur, l’analyseur reviendra à son comportement par défaut — et ne fera rien.
La manière la plus pratique de traiter l’entrée consiste à la lire en un seul passage à l’aide de la fonction ` parse()` avec un argument spécifiant la source d’entrée :
bool ok = xmlReader.parse(source);
if (!ok)
std::cout << "Parsing failed." << std::endl;Si vous ne pouvez pas analyser l’intégralité de l’entrée en une seule fois (par exemple, si elle est volumineuse ou transmise via une connexion réseau), les données peuvent être fournies au parseur par tranches. Pour ce faire, il suffit de demander à parse() de fonctionner de manière incrémentielle, puis d’appeler successivement la fonction parseContinue() jusqu’à ce que toutes les données aient été traitées.
Une méthode courante pour effectuer un analyseur incrémental consiste à connecter le signal ` readyRead() ` d’un ` network reply ` à un slot, et à y traiter les données entrantes. Voir QNetworkAccessManager.
Certains aspects du comportement d’analyse peuvent être adaptés à l’aide des méthodes ` setFeature()` et ` setProperty()`.
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);QXmlSimpleReader n'est pas réentrant. Si vous souhaitez utiliser cette classe dans un code multithread, verrouillez le code utilisant QXmlSimpleReader à l'aide d'un mécanisme de verrouillage, tel que QMutex.
Notez que cette classe est désormais obsolète ; veuillez utiliser QXmlStreamReader ou QDomDocument pour lire des fichiers XML.
Documentation des fonctions membres
QXmlSimpleReader::QXmlSimpleReader()
Crée un lecteur XML simple.
[virtual noexcept] QXmlSimpleReader::~QXmlSimpleReader()
Supprime le lecteur XML simple.
[override virtual] QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const
Réimplémente : QXmlReader::DTDHandler() const.
Voir aussi setDTDHandler().
[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const
Réimplémente : QXmlReader::contentHandler() const.
Voir aussi setContentHandler().
[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const
Réimplémente : QXmlReader::declHandler() const.
Voir aussi setDeclHandler().
[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const
Réimplémente : QXmlReader::entityResolver() const.
Voir aussi setEntityResolver().
[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const
Réimplémente : QXmlReader::errorHandler() const.
Voir également setErrorHandler().
[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const
Réimplémente : QXmlReader::feature(const QString &name, bool *ok) const.
Voir également setFeature().
[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const
Réimplémente : QXmlReader::hasFeature(const QString &name) const.
[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const
Réimplémente : QXmlReader::hasProperty(const QString &name) const.
[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const
Réimplémente : QXmlReader::lexicalHandler() const.
Voir également setLexicalHandler().
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)
Réimplémente : QXmlReader::parse(const QXmlInputSource &input).
[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input)
Réimplémente : QXmlReader::parse(const QXmlInputSource *input).
Lit un document XML à partir de ` input ` et l'analyse en un seul passage (de manière non incrémentielle). Renvoie ` true ` si l'analyse s'est déroulée correctement ; sinon, renvoie ` false`.
[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)
Lit un document XML à partir de input et l'analyse. Renvoie true si l'analyse s'est déroulée avec succès ; sinon, renvoie false, indiquant qu'une erreur s'est produite.
Si incremental est faux, cette fonction renvoie faux si le fichier XML n’a pas été lu dans son intégralité. Dans ce cas, l’analyse ne peut pas se poursuivre.
Si incremental est vrai, l’analyseur ne renvoie pas false s’il atteint la fin de l’ input avant d’avoir atteint la fin du fichier XML. Au lieu de cela, il enregistre l’état de l’analyseur afin que l’analyse puisse être poursuivie ultérieurement lorsque davantage de données seront disponibles. Dans ce cas, vous pouvez utiliser la fonction parseContinue() pour poursuivre l’analyse. Cette classe stocke un pointeur vers la source d’entrée input et la fonction parseContinue() tente de lire à partir de cette source d’entrée. Par conséquent, vous ne devez pas supprimer la source d’entrée input tant que vous n’avez pas fini d’appeler parseContinue().
Si cette fonction est appelée avec incremental défini sur true alors qu’une analyse incrémentielle est en cours, une nouvelle session d’analyse sera lancée et la session précédente sera perdue.
Voir également parseContinue() et QTcpSocket.
[virtual] bool QXmlSimpleReader::parseContinue()
Poursuit l'analyse incrémentielle, en utilisant les données fournies par l'QXmlInputSource spécifié lors du dernier appel à la fonction parse(). Pour utiliser cette fonction, vous devez avoir appelé la fonction parse() avec l'argument « incremental » défini sur « true ».
Renvoie ` false ` si une erreur d’analyse se produit ; sinon, renvoie ` true`, même si la fin du fichier XML n’a pas été atteinte. Vous pouvez poursuivre l’analyse ultérieurement en appelant à nouveau cette fonction lorsque de nouvelles données sont disponibles pour l’analyse.
L’appel de cette fonction alors qu’aucune donnée n’est disponible dans la source d’entrée indique au lecteur que la fin du fichier XML a été atteinte. Si les données fournies jusqu’à ce point n’étaient pas bien formées, une erreur d’analyse se produit et la valeur « false » est renvoyée. Si les données fournies étaient bien formées, la valeur `true` est renvoyée. Il est important de terminer l’entrée de cette manière, car cela vous permet de réutiliser le lecteur pour analyser d’autres fichiers XML.
L'appel de cette fonction après avoir atteint la fin du fichier, mais en l'absence de données disponibles, entraînera le retour de la valeur « false », que l'entrée précédente ait été bien formée ou non.
Voir également parse(), QXmlInputSource::data() et QXmlInputSource::next().
[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const
Réimplémente : QXmlReader::property(const QString &name, bool *ok) const.
Voir également setProperty().
[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)
Réimplémente : QXmlReader::setContentHandler(QXmlContentHandler *handler).
Voir également contentHandler().
[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)
Réimplémente : QXmlReader::setDTDHandler(QXmlDTDHandler *handler).
[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)
Réimplémente : QXmlReader::setDeclHandler(QXmlDeclHandler *handler).
Voir également declHandler().
[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)
Réimplémente : QXmlReader::setEntityResolver(QXmlEntityResolver *handler).
Voir également entityResolver().
[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)
Réimplémente : QXmlReader::setErrorHandler(QXmlErrorHandler *handler).
Voir également errorHandler().
[override virtual] void QXmlSimpleReader::setFeature(const QString &name, bool enable)
Réimplémente : QXmlReader::setFeature(const QString &name, bool value).
Active la fonctionnalité « name » si la valeur de « enable » est vraie ; sinon, la désactive.
Le paramètre « name » doit être l’une des chaînes suivantes :
| Fonctionnalité | Valeur par défaut | Remarques |
|---|---|---|
| http://xml.org/sax/features/namespaces | true | Si cette option est activée, les espaces de noms sont signalés au gestionnaire de contenu. |
| http://xml.org/sax/features/namespace-prefixes | false | Si cette option est activée, les noms et attributs préfixés d'origine utilisés pour les déclarations d'espaces de noms sont signalés. |
| http://qt-project.org/xml/features/report-whitespace-only-CharData | true | Si cette option est activée, les données de type CharData composées uniquement de caractères d'espacement sont signalées à l'aide de la fonction ` QXmlContentHandler::characters()`. Si elle est désactivée, les caractères d'espacement sont ignorés sans message. |
| http://qt-project.org/xml/features/report-start-end-entity | false | Si cette option est activée, l'analyseur signale les événements QXmlContentHandler::startEntity() et QXmlContentHandler::endEntity(), de sorte que les données de caractères peuvent être signalées par blocs. Si cette option est désactivée, l'analyseur ne signale pas ces événements, mais remplace silencieusement les entités et signale les données de caractères en un seul bloc. |
Voir également feature() et hasFeature().
[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)
Réimplémente : QXmlReader::setLexicalHandler(QXmlLexicalHandler *handler).
Voir également lexicalHandler().
[override virtual] void QXmlSimpleReader::setProperty(const QString &name, void *value)
Réimplémente : QXmlReader::setProperty(const QString &name, void *value).
Voir également property().
© 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.