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