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:
| Funktion | Standard | Hinweise |
|---|---|---|
| http://xml.org/sax/features/namespaces | true | Wenn diese Option aktiviert ist, werden Namespaces an den Content-Handler gemeldet. |
| http://xml.org/sax/features/namespace-prefixes | false | Wenn 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-CharData | true | Wenn 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-entity | false | Wenn 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.