Sur cette page

QXmlSimpleReader Class

La classe QXmlSimpleReader fournit une implémentation d'un analyseur XML simple. Plus d'informations...

En-tête : #include <QXmlSimpleReader>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake : QT += core5compat
Héritages : QXmlReader

Avertissement : Cette classe n'est pas réentrante : 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 XML bien formé et de signaler les espaces de noms des éléments à un gestionnaire de contenu ; cependant, il n'analyse pas les entités externes. Pour des raisons historiques, la normalisation des valeurs d'attributs et la gestion des fins de ligne 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 est de créer une instance de lecteur, de définir une source d'entrée, de spécifier les gestionnaires à utiliser par le lecteur et d'analyser les données.

Par exemple, nous pourrions utiliser un site QFile pour fournir les données d'entrée. Ici, nous créons un lecteur et définissons une source d'entrée à utiliser par le lecteur :

    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 l'entrée. Le lecteur doit savoir 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 syntaxique adoptera son comportement par défaut et ne fera rien.

La façon la plus pratique de traiter l'entrée est de la lire en une seule fois en utilisant la fonction parse() avec un argument qui spécifie 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 si elle est transmise via une connexion réseau), les données peuvent être transmises à l'analyseur par morceaux. Pour ce faire, indiquez à parse() de travailler de manière incrémentielle et faites des appels ultérieurs à la fonction parseContinue(), jusqu'à ce que toutes les données aient été traitées.

Une façon courante d'effectuer une analyse incrémentale est de connecter le signal readyRead() d'un network reply à un slot, et de traiter les données entrantes à cet endroit. Voir QNetworkAccessManager.

Certains aspects du comportement de l'analyse syntaxique peuvent être adaptés à l'aide de setFeature() et setProperty().

xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);

QXmlSimpleReader n'est pas réentrant. Si vous souhaitez utiliser la classe dans un code threadé, verrouillez le code utilisant QXmlSimpleReader à l'aide d'un mécanisme de verrouillage, tel que QMutex.

Notez que cette classe est maintenant obsolète, veuillez utiliser QXmlStreamReader ou QDomDocument pour lire les fichiers XML.

Documentation des fonctions membres

QXmlSimpleReader::QXmlSimpleReader()

Construit un lecteur XML simple.

[virtual noexcept] QXmlSimpleReader::~QXmlSimpleReader()

Détruit le lecteur XML simple.

[override virtual] QXmlDTDHandler *QXmlSimpleReader::DTDHandler() const

Réimplémente : QXmlReader::DTDHandler() const.

Voir également setDTDHandler().

[override virtual] QXmlContentHandler *QXmlSimpleReader::contentHandler() const

Réimplémente : QXmlReader::contentHandler() const.

Voir également setContentHandler().

[override virtual] QXmlDeclHandler *QXmlSimpleReader::declHandler() const

Réimplémente : QXmlReader::declHandler() const.

Voir également setDeclHandler().

[override virtual] QXmlEntityResolver *QXmlSimpleReader::entityResolver() const

Réimplémente : QXmlReader::entityResolver() const.

Voir également 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 une seule passe (de manière non incrémentale). Renvoie true si l'analyse est réussie ; sinon, renvoie false.

[virtual] bool QXmlSimpleReader::parse(const QXmlInputSource *input, bool incremental)

Lit un document XML à partir de input et l'analyse. Elle renvoie true si l'analyse est réussie, sinon elle renvoie false, indiquant qu'une erreur s'est produite.

Si incremental est faux, cette fonction renvoie un message faux si le fichier XML n'est pas lu complètement. L'analyse ne peut pas être poursuivie dans ce cas.

Si incremental est vrai, l'analyseur ne renvoie pas un message faux s'il atteint la fin de input avant d'atteindre la fin du fichier XML. Au lieu de cela, il stocke l'état de l'analyseur de manière à ce 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 sur 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 besoin d'appeler parseContinue().

Si cette fonction est appelée alors que incremental vaut true et qu'une analyse incrémentale est en cours, une nouvelle session d'analyse est lancée et la session précédente est perdue.

Voir aussi parseContinue() et QTcpSocket.

[virtual] bool QXmlSimpleReader::parseContinue()

Poursuit l'analyse incrémentale, en prenant en entrée le fichier QXmlInputSource qui a été spécifié lors du dernier appel à parse(). Pour utiliser cette fonction, vous devez avoir appelé parse() avec l'argument incrémental à true.

Renvoie false en cas d'erreur d'analyse ; sinon, renvoie true, même si la fin du fichier XML n'a pas été atteinte. Vous pouvez poursuivre l'analyse à un stade ultérieur en appelant à nouveau cette fonction lorsqu'il y a plus de données à analyser.

L'appel de cette fonction lorsqu'il n'y a pas de données disponibles dans la source d'entrée indique au lecteur que la fin du fichier XML a été atteinte. Si l'entrée fournie jusqu'à ce point n'était pas bien formée, une erreur d'analyse se produit et false est renvoyé. Si l'entrée fournie était bien formée, true est renvoyé. 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 que la fin du fichier a été atteinte, mais sans données disponibles, entraînera le renvoi de false, que l'entrée précédente ait été bien formée ou non.

Voir aussi 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 enable est vrai ; sinon, la désactive.

Le paramètre name doit être l'une des chaînes suivantes :

FonctionnalitéDéfautNotes
http://xml.org/sax/features/namespacesvraiSi cette option est activée, les espaces de noms sont signalés au gestionnaire de contenu.
http://xml.org/sax/features/namespace-prefixesfauxSi l'option est activée, les noms préfixés originaux et les attributs utilisés pour les déclarations d'espaces de noms sont signalés.
http://qt-project.org/xml/features/report-whitespace-only-CharDatatrue (vrai)Si l'option est activée, les CharData constitués uniquement de caractères d'espacement sont signalés à l'aide de QXmlContentHandler::characters(). S'il est désactivé, les espaces blancs sont ignorés.
http://qt-project.org/xml/features/report-start-end-entityfalseSi cette option est activée, l'analyseur syntaxique signale les événements QXmlContentHandler::startEntity() et QXmlContentHandler::endEntity(), de sorte que les données de caractères peuvent être signalées par morceaux. S'il est désactivé, l'analyseur ne signale pas ces événements, mais substitue silencieusement les entités et signale les données de caractères en un seul morceau.

Voir aussi 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.