Auf dieser Seite

QXmlSimpleReader Class

Die Klasse „QXmlSimpleReader“ bietet eine Implementierung eines einfachen XML-Parsers. Mehr...

Kopfzeile: #include <QXmlSimpleReader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core5Compat)
target_link_libraries(mytarget PRIVATE Qt6::Core5Compat)
qmake: QT += core5compat
Erbt von: QXmlReader

Warnung: Diese Klasse ist nicht reentrant.

Öffentliche Funktionen

QXmlSimpleReader()
virtual ~QXmlSimpleReader()
virtual bool parse(const QXmlInputSource *input, bool incremental)
virtual bool parseContinue()

Neu implementierte öffentliche Funktionen

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

Ausführliche Beschreibung

Dieser XML-Reader eignet sich für eine Vielzahl von Anwendungen. Er kann wohlgeformtes XML analysieren und die Namespaces von Elementen an einen Content-Handler melden; externe Entitäten werden jedoch nicht analysiert. Aus historischen Gründen werden die in der XML 1.0-Spezifikation beschriebene Normalisierung von Attributwerten und die Zeilenende-Verarbeitung nicht durchgeführt.

Die einfachste Art, diese Klasse zu verwenden, besteht darin, eine Reader-Instanz zu erstellen, eine Eingabequelle zu definieren, die vom Reader zu verwendenden Handler anzugeben und die Daten zu analysieren.

Beispielsweise könnten wir einen „ QFile “ zur Bereitstellung der Eingabe verwenden. Hier erstellen wir einen Reader und definieren eine Eingabequelle, die vom Reader verwendet werden soll:

    QXmlSimpleReader xmlReader;
    QXmlInputSource *source = new QXmlInputSource(file);

Ein Handler ermöglicht es uns, Aktionen auszuführen, wenn der Reader auf bestimmte Arten von Inhalten stößt oder wenn Fehler in der Eingabe gefunden werden. Dem Reader muss mitgeteilt werden, welcher Handler für jede Art von Ereignis verwendet werden soll. Für viele gängige Anwendungen können wir einen benutzerdefinierten Handler erstellen, indem wir eine Unterklasse von ` QXmlDefaultHandler` definieren, und diesen verwenden, um sowohl Fehler- als auch Inhaltsereignisse zu behandeln:

    Handler *handler = new Handler;
    xmlReader.setContentHandler(handler);
    xmlReader.setErrorHandler(handler);

Wenn Sie nicht zumindest die Handler für Inhalte und Fehler festlegen, greift der Parser auf sein Standardverhalten zurück – und unternimmt nichts.

Am bequemsten lässt sich die Eingabe in einem einzigen Durchlauf mit der Funktion ` parse()` einlesen, wobei das Argument die Eingabequelle angibt:

    bool ok = xmlReader.parse(source);

    if (!ok)
        std::cout << "Parsing failed." << std::endl;

Wenn Sie die gesamte Eingabe nicht in einem Durchgang parsen können (z. B. weil sie sehr umfangreich ist oder über eine Netzwerkverbindung übertragen wird), können die Daten stückweise an den Parser übergeben werden. Dies erreichen Sie, indem Sie ` parse()` anweisen, inkrementell zu arbeiten, und anschließend wiederholt die Funktion ` parseContinue()` aufrufen, bis alle Daten verarbeitet sind.

Eine gängige Methode zur inkrementellen Analyse besteht darin, das Signal ` readyRead() ` eines ` network reply ` mit einem Slot zu verbinden und die eingehenden Daten dort zu verarbeiten. Siehe QNetworkAccessManager.

Bestimmte Aspekte des Parsing-Verhaltens lassen sich mithilfe von ` setFeature()` und ` setProperty()` anpassen.

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

QXmlSimpleReader ist nicht reentrant. Wenn Sie die Klasse in Thread-Code verwenden möchten, sperren Sie den Code, der QXmlSimpleReader nutzt, mit einem Sperrmechanismus, beispielsweise einem QMutex.

Beachten Sie, dass diese Klasse mittlerweile veraltet ist; verwenden Sie zum Lesen von XML-Dateien bitte QXmlStreamReader oder QDomDocument.

Dokumentation zu den Mitgliedsfunktionen

QXmlSimpleReader::QXmlSimpleReader()

Erstellt einen einfachen XML-Reader.

[virtual noexcept] QXmlSimpleReader::~QXmlSimpleReader()

Löscht den einfachen XML-Reader.

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

Implementiert neu: QXmlReader::DTDHandler() const.

Siehe auch setDTDHandler().

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

Implementiert neu: QXmlReader::contentHandler() const.

Siehe auch setContentHandler().

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

Implementiert neu: QXmlReader::declHandler() const.

Siehe auch setDeclHandler().

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

Implementiert neu: QXmlReader::entityResolver() const.

Siehe auch setEntityResolver().

[override virtual] QXmlErrorHandler *QXmlSimpleReader::errorHandler() const

Implementiert neu: ` QXmlReader::errorHandler()` const.

Siehe auch setErrorHandler().

[override virtual] bool QXmlSimpleReader::feature(const QString &name, bool *ok = nullptr) const

Implementiert neu: ` QXmlReader::feature(const QString &name, bool *ok) const`.

Siehe auch setFeature().

[override virtual] bool QXmlSimpleReader::hasFeature(const QString &name) const

Implementiert erneut: ` QXmlReader::hasFeature(const QString &name) const`.

[override virtual] bool QXmlSimpleReader::hasProperty(const QString &name) const

Implementiert erneut: ` QXmlReader::hasProperty(const QString &name) const`.

[override virtual] QXmlLexicalHandler *QXmlSimpleReader::lexicalHandler() const

Implementiert neu: QXmlReader::lexicalHandler() const.

Siehe auch setLexicalHandler().

[override virtual] bool QXmlSimpleReader::parse(const QXmlInputSource &input)

Implementiert neu: ` QXmlReader::parse(const QXmlInputSource &input)`.

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

Implementiert: QXmlReader::parse(const QXmlInputSource *input).

Liest ein XML-Dokument aus ` input ` ein und analysiert es in einem Durchgang (nicht inkrementell). Gibt ` true ` zurück, wenn die Analyse erfolgreich war; andernfalls wird ` false` zurückgegeben.

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

Liest ein XML-Dokument von input ein und analysiert es. Gibt „ true “ zurück, wenn die Analyse erfolgreich abgeschlossen wurde; andernfalls wird „ false “ zurückgegeben, was darauf hinweist, dass ein Fehler aufgetreten ist.

Ist incremental falsch, gibt diese Funktion „false“ zurück, wenn die XML-Datei nicht vollständig gelesen wurde. In diesem Fall kann das Parsen nicht fortgesetzt werden.

Ist ` incremental ` wahr, gibt der Parser nicht `false` zurück, wenn er das Ende von ` input ` erreicht, bevor das Ende der XML-Datei erreicht ist. Stattdessen speichert er den Zustand des Parsers, sodass das Parsen später fortgesetzt werden kann, sobald weitere Daten verfügbar sind. In einem solchen Fall können Sie die Funktion ` parseContinue()` verwenden, um das Parsen fortzusetzen. Diese Klasse speichert einen Zeiger auf die Eingabequelle ` input `, und die Funktion ` parseContinue()` versucht, aus dieser Eingabequelle zu lesen. Daher sollten Sie die Eingabequelle ` input ` nicht löschen, bis Sie den Aufruf von ` parseContinue()` nicht mehr benötigen.

Wird diese Funktion aufgerufen, während eine inkrementelle Analyse läuft und incremental auf „true“ gesetzt ist, wird eine neue Analysesitzung gestartet und die vorherige Sitzung geht verloren.

Siehe auch parseContinue() und QTcpSocket.

[virtual] bool QXmlSimpleReader::parseContinue()

Setzt das inkrementelle Parsen fort und verwendet dabei die Eingabe aus dem „ QXmlInputSource “, der beim letzten Aufruf von „ parse()“ angegeben wurde. Um diese Funktion nutzen zu können, müssen Sie zuvor „ parse()“ aufgerufen und dabei das Argument „incremental“ auf „true“ gesetzt haben.

Gibt ` false ` zurück, wenn ein Parsing-Fehler auftritt; andernfalls wird ` true` zurückgegeben, auch wenn das Ende der XML-Datei noch nicht erreicht wurde. Sie können das Parsing zu einem späteren Zeitpunkt fortsetzen, indem Sie diese Funktion erneut aufrufen, sobald weitere Daten zum Parsen verfügbar sind.

Der Aufruf dieser Funktion, wenn in der Eingabequelle keine Daten mehr vorhanden sind, signalisiert dem Reader, dass das Ende der XML-Datei erreicht wurde. War die bis zu diesem Zeitpunkt übergebene Eingabe nicht wohlgeformt, tritt ein Parsing-Fehler auf und es wird „false“ zurückgegeben. War die übergebene Eingabe wohlgeformt, wird `true` zurückgegeben. Es ist wichtig, die Eingabe auf diese Weise zu beenden, da Sie den Reader so für das Parsen anderer XML-Dateien wiederverwenden können.

Wird diese Funktion aufgerufen, nachdem das Dateiende erreicht wurde, ohne dass Daten verfügbar sind, wird „false“ zurückgegeben, unabhängig davon, ob die vorherige Eingabe wohlgeformt war oder nicht.

Siehe auch parse(), QXmlInputSource::data() und QXmlInputSource::next().

[override virtual] void *QXmlSimpleReader::property(const QString &name, bool *ok = nullptr) const

Implementiert neu: ` QXmlReader::property(const QString &name, bool *ok) const`.

Siehe auch setProperty().

[override virtual] void QXmlSimpleReader::setContentHandler(QXmlContentHandler *handler)

Umsetzt: ` QXmlReader::setContentHandler(QXmlContentHandler *handler)`.

Siehe auch „ contentHandler()“.

[override virtual] void QXmlSimpleReader::setDTDHandler(QXmlDTDHandler *handler)

Implementiert: ` QXmlReader::setDTDHandler` (`QXmlDTDHandler *handler`).

[override virtual] void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler *handler)

Umsetzt: ` QXmlReader::setDeclHandler` (`QXmlDeclHandler *handler`).

Siehe auch declHandler().

[override virtual] void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver *handler)

Umsetzt: ` QXmlReader::setEntityResolver` (`QXmlEntityResolver *handler`).

Siehe auch entityResolver().

[override virtual] void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler *handler)

Umsetzt: QXmlReader::setErrorHandler(QXmlErrorHandler *handler).

Siehe auch errorHandler().

[override virtual] void QXmlSimpleReader::setFeature(const QString &name, bool enable)

Implementiert: ` QXmlReader::setFeature(const QString &name, bool value)`.

Aktiviert die Funktion „ name “, wenn „ enable “ wahr ist; andernfalls wird sie deaktiviert.

Der Parameter „ name “ muss eine der folgenden Zeichenfolgen sein:

FunktionStandardHinweise
http://xml.org/sax/features/namespacestrueWenn diese Option aktiviert ist, werden Namespaces an den Content-Handler gemeldet.
http://xml.org/sax/features/namespace-prefixesfalseWenn diese Option aktiviert ist, werden die ursprünglichen Namen mit Präfix und die Attribute, die für Namespace-Deklarationen verwendet wurden, gemeldet.
http://qt-project.org/xml/features/report-whitespace-only-CharDatatrueWenn diese Option aktiviert ist, werden „CharData“, die ausschließlich aus Leerzeichen bestehen, mithilfe von „ QXmlContentHandler::characters()“ gemeldet. Ist sie deaktiviert, werden Leerzeichen stillschweigend verworfen.
http://qt-project.org/xml/features/report-start-end-entityfalseWenn diese Option aktiviert ist, meldet der Parser die Ereignisse QXmlContentHandler::startEntity() und QXmlContentHandler::endEntity(), sodass Zeichendaten möglicherweise in Blöcken gemeldet werden. Ist diese Option deaktiviert, meldet der Parser diese Ereignisse nicht, ersetzt die Entitäten jedoch stillschweigend und meldet die Zeichendaten in einem Block.

Siehe auch feature() und hasFeature().

[override virtual] void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler *handler)

Umsetzt: ` QXmlReader::setLexicalHandler` (`QXmlLexicalHandler *handler`).

Siehe auch lexicalHandler().

[override virtual] void QXmlSimpleReader::setProperty(const QString &name, void *value)

Implementiert neu: QXmlReader::setProperty(const QString &name, void *value).

Siehe auch 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.