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
Vererbt: QXmlReader

Warnung: Diese Klasse ist nicht reentrant.

Öffentliche Funktionen

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

Reimplementierte ö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

Detaillierte Beschreibung

Dieser XML-Reader ist für eine Vielzahl von Anwendungen geeignet. Er ist in der Lage, wohlgeformtes XML zu parsen und kann die Namespaces von Elementen an einen Content-Handler melden; er parst jedoch keine externen Entitäten. Aus historischen Gründen wird die Normalisierung von Attributwerten und die Behandlung von Zeilenenden, wie in der XML 1.0-Spezifikation beschrieben, nicht durchgeführt.

Das einfachste Anwendungsmuster für diese Klasse besteht darin, eine Reader-Instanz zu erstellen, eine Eingabequelle zu definieren, die vom Reader zu verwendenden Handler zu spezifizieren und die Daten zu parsen.

Zum Beispiel könnten wir eine QFile verwenden, um die Eingabe zu liefern. Hier erstellen wir ein Lesegerät und definieren eine Eingabequelle, die vom Lesegerät 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 Lesegerät muss mitgeteilt werden, welcher Handler für jede Art von Ereignis zu verwenden ist. Für viele gängige Anwendungen können wir einen benutzerdefinierten Handler erstellen, indem wir die Unterklasse QXmlDefaultHandler verwenden, um sowohl Fehler- als auch Inhaltsereignisse zu behandeln:

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

Wenn Sie nicht zumindest die Inhalts- und Fehler-Handler festlegen, greift der Parser auf sein Standardverhalten zurück - und tut nichts.

Der bequemste Weg, die Eingabe zu verarbeiten, ist, sie in einem einzigen Durchgang zu lesen, indem Sie die Funktion parse() mit einem Argument verwenden, das die Eingabequelle angibt:

    bool ok = xmlReader.parse(source);

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

Wenn Sie nicht die gesamte Eingabe in einem Durchgang parsen können (z. B. weil sie sehr groß ist oder über eine Netzwerkverbindung geliefert wird), können die Daten dem Parser in Teilen zugeführt werden. Dies wird erreicht, indem man parse() anweist, inkrementell zu arbeiten, und die Funktion parseContinue() so lange aufruft, bis alle Daten verarbeitet worden sind.

Ein üblicher Weg, inkrementelles Parsing durchzuführen, ist, das readyRead() Signal eines network reply mit einem Slot zu verbinden und die eingehenden Daten dort zu verarbeiten. Siehe QNetworkAccessManager.

Aspekte des Parsing-Verhaltens können mit setFeature() und setProperty() angepasst werden.

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

QXmlSimpleReader ist nicht reentrant. Wenn Sie die Klasse in threaded Code verwenden wollen, sperren Sie den Code, der QXmlSimpleReader verwendet, mit einem Sperrmechanismus, wie z.B. QMutex.

Beachten Sie, dass diese Klasse jetzt veraltet ist. Bitte verwenden Sie QXmlStreamReader oder QDomDocument zum Lesen von XML-Dateien.

Dokumentation der Mitgliedsfunktionen

QXmlSimpleReader::QXmlSimpleReader()

Konstruiert einen einfachen XML-Reader.

[virtual noexcept] QXmlSimpleReader::~QXmlSimpleReader()

Zerstört den einfachen XML-Reader.

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

Reimplements: QXmlReader::DTDHandler() const.

Siehe auch setDTDHandler().

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

Reimplements: QXmlReader::contentHandler() const.

Siehe auch setContentHandler().

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

Reimplements: QXmlReader::declHandler() const.

Siehe auch setDeclHandler().

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

Reimplements: QXmlReader::entityResolver() const.

Siehe auch setEntityResolver().

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

Reimplements: QXmlReader::errorHandler() const.

Siehe auch setErrorHandler().

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

Reimplements: QXmlReader::feature(const QString &name, bool *ok) const.

Siehe auch setFeature().

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

Reimplements: QXmlReader::hasFeature(const QString &name) const.

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

Reimplements: QXmlReader::hasProperty(const QString &name) const.

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

Reimplements: QXmlReader::lexicalHandler() const.

Siehe auch setLexicalHandler().

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

Reimplements: QXmlReader::parse(const QXmlInputSource &input).

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

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

Liest ein XML-Dokument von input und parst es in einem Durchgang (nicht-inkrementell). Gibt true zurück, wenn das Parsen erfolgreich war; andernfalls false.

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

Liest ein XML-Dokument von input und parst es. Gibt true zurück, wenn das Parsen erfolgreich abgeschlossen wurde; andernfalls wird false zurückgegeben, was anzeigt, dass ein Fehler aufgetreten ist.

Wenn incremental false ist, gibt diese Funktion false zurück, wenn die XML-Datei nicht vollständig gelesen wurde. Das Parsen kann in diesem Fall nicht fortgesetzt werden.

Wenn incremental true ist, gibt der Parser nicht false zurück, wenn er das Ende von input erreicht, bevor er das Ende der XML-Datei erreicht hat. Stattdessen speichert er den Zustand des Parsers, damit das Parsen später fortgesetzt werden kann, wenn mehr Daten verfügbar sind. In einem solchen Fall können Sie die Funktion parseContinue() verwenden, um mit dem Parsen fortzufahren. Diese Klasse speichert einen Zeiger auf die Eingabequelle input und die Funktion parseContinue() versucht, von dieser Eingabequelle zu lesen. Daher sollten Sie die Eingabequelle input erst löschen, wenn Sie parseContinue() nicht mehr aufrufen müssen.

Wenn diese Funktion aufgerufen wird, während incremental auf true gesetzt ist und ein inkrementelles Parsen läuft, wird eine neue Parsing-Sitzung gestartet und die vorherige Sitzung geht verloren.

Siehe auch parseContinue() und QTcpSocket.

[virtual] bool QXmlSimpleReader::parseContinue()

Setzt das inkrementelle Parsing fort, wobei die Eingabe von QXmlInputSource übernommen wird, die mit dem letzten Aufruf von parse() angegeben wurde. Um diese Funktion zu verwenden, müssen Sie parse() mit dem auf true gesetzten inkrementellen Argument aufgerufen haben.

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

Der Aufruf dieser Funktion, wenn keine Daten in der Eingabequelle vorhanden sind, zeigt dem Leser an, dass das Ende der XML-Datei erreicht wurde. Wenn die bis zu diesem Zeitpunkt gelieferte Eingabe nicht wohlgeformt war, tritt ein Parsing-Fehler auf, und es wird false zurückgegeben. Wenn die Eingabe wohlgeformt war, wird true zurückgegeben. Es ist wichtig, die Eingabe auf diese Weise zu beenden, denn so können Sie den Reader zum Parsen anderer XML-Dateien wiederverwenden.

Wenn Sie diese Funktion aufrufen, nachdem das Ende der Datei erreicht wurde, aber keine 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

Reimplements: QXmlReader::property(const QString &name, bool *ok) const.

Siehe auch setProperty().

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

Reimplements: QXmlReader::setContentHandler(QXmlContentHandler *handler).

Siehe auch contentHandler().

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

Reimplements: QXmlReader::setDTDHandler(QXmlDTDHandler *handler).

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

Reimplements: QXmlReader::setDeclHandler(QXmlDeclHandler *handler).

Siehe auch declHandler().

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

Reimplements: QXmlReader::setEntityResolver(QXmlEntityResolver *handler).

Siehe auch entityResolver().

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

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

Siehe auch errorHandler().

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

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

Schaltet das Merkmal name ein, wenn enable wahr ist; andernfalls schaltet es aus.

Der Parameter name muss eine der folgenden Zeichenketten sein:

MerkmalVoreinstellungHinweise
http://xml.org/sax/features/namespacestrueWenn aktiviert, werden Namespaces an den Content Handler gemeldet.
http://xml.org/sax/features/namespace-prefixesfalseWenn aktiviert, werden die ursprünglichen Namen und Attribute, die für Namespace-Deklarationen verwendet werden, gemeldet.
http://qt-project.org/xml/features/report-whitespace-only-CharDatatrueWenn aktiviert, werden CharData, die nur aus Leerzeichen bestehen, mit QXmlContentHandler::characters() gemeldet. Wenn deaktiviert, werden Leerzeichen stillschweigend verworfen.
http://qt-project.org/xml/features/report-start-end-entityfalseWenn aktiviert, meldet der Parser die Ereignisse QXmlContentHandler::startEntity() und QXmlContentHandler::endEntity(), so dass Zeichendaten möglicherweise in Stücken gemeldet werden. Wenn deaktiviert, meldet der Parser diese Ereignisse nicht, sondern ersetzt die Entitäten stillschweigend und meldet die Zeichendaten in einem Stück.

Siehe auch feature() und hasFeature().

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

Reimplements: QXmlReader::setLexicalHandler(QXmlLexicalHandler *handler).

Siehe auch lexicalHandler().

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

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

Siehe auch property().

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