Sur cette page

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éfautRemarques
http://xml.org/sax/features/namespacestrueSi cette option est activée, les espaces de noms sont signalés au gestionnaire de contenu.
http://xml.org/sax/features/namespace-prefixesfalseSi 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-CharDatatrueSi 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-entityfalseSi 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.