QXmlStreamReader Class
Die Klasse „QXmlStreamReader“ bietet einen schnellen Parser zum Einlesen wohlgeformter XML 1.0-Dokumente über eine einfache Streaming-API. Mehr...
| Kopfzeile: | #include <QXmlStreamReader> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QXmlStreamReader ist Teil der XML-Klassen.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Typen
| enum | Error { NoError, CustomError, NotWellFormedError, PrematureEndOfDocumentError, UnexpectedElementError } |
| enum | ReadElementTextBehaviour { ErrorOnUnexpectedElement, IncludeChildElements, SkipChildElements } |
| enum | TokenType { NoToken, Invalid, StartDocument, EndDocument, StartElement, …, ProcessingInstruction } |
Eigenschaften
- namespaceProcessing : bool
Öffentliche Funktionen
| QXmlStreamReader() | |
| QXmlStreamReader(QAnyStringView data) | |
| QXmlStreamReader(QIODevice *device) | |
| QXmlStreamReader(const QByteArray &data) | |
| ~QXmlStreamReader() | |
| void | addData(QAnyStringView data) |
| void | addData(const QByteArray &data) |
| void | addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration) |
| void | addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations) |
| bool | atEnd() const |
| QXmlStreamAttributes | attributes() const |
| qint64 | characterOffset() const |
| void | clear() |
| qint64 | columnNumber() const |
| QIODevice * | device() const |
| QStringView | documentEncoding() const |
| QStringView | documentVersion() const |
| QStringView | dtdName() const |
| QStringView | dtdPublicId() const |
| QStringView | dtdSystemId() const |
| QXmlStreamEntityDeclarations | entityDeclarations() const |
| int | entityExpansionLimit() const |
| QXmlStreamEntityResolver * | entityResolver() const |
| QXmlStreamReader::Error | error() const |
| QString | errorString() const |
| bool | hasError() const |
(since 6.6) bool | hasStandaloneDeclaration() const |
| bool | isCDATA() const |
| bool | isCharacters() const |
| bool | isComment() const |
| bool | isDTD() const |
| bool | isEndDocument() const |
| bool | isEndElement() const |
| bool | isEntityReference() const |
| bool | isProcessingInstruction() const |
| bool | isStandaloneDocument() const |
| bool | isStartDocument() const |
| bool | isStartElement() const |
| bool | isWhitespace() const |
| qint64 | lineNumber() const |
| QStringView | name() const |
| QXmlStreamNamespaceDeclarations | namespaceDeclarations() const |
| bool | namespaceProcessing() const |
| QStringView | namespaceUri() const |
| QXmlStreamNotationDeclarations | notationDeclarations() const |
| QStringView | prefix() const |
| QStringView | processingInstructionData() const |
| QStringView | processingInstructionTarget() const |
| QStringView | qualifiedName() const |
| void | raiseError(const QString &message = QString()) |
| QString | readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement) |
| QXmlStreamReader::TokenType | readNext() |
| bool | readNextStartElement() |
(since 6.10) QString | readRawInnerData() |
| void | setDevice(QIODevice *device) |
| void | setEntityExpansionLimit(int limit) |
| void | setEntityResolver(QXmlStreamEntityResolver *resolver) |
| void | setNamespaceProcessing(bool) |
| void | skipCurrentElement() |
| QStringView | text() const |
| QString | tokenString() const |
| QXmlStreamReader::TokenType | tokenType() const |
Ausführliche Beschreibung
QXmlStreamReader bietet eine einfache Streaming-API zum Parsen wohlgeformter XML 1.0-Dokumente. Es handelt sich um eine Alternative zum vorherigen Laden des gesamten XML in einen DOM-Baum (siehe QDomDocument). QXmlStreamReader liest Daten entweder aus einem „ QIODevice “ (siehe setDevice()), oder aus einem „Raw- QByteArray “ (siehe addData()).
Hinweis: QXmlStreamReader unterstützt nur XML Version 1.0. Dokumente, die eine andere Version deklarieren, wie beispielsweise „1.1“, führen zu einem Parsing-Fehler.
Qt stellt „ QXmlStreamWriter “ zum Schreiben von XML bereit.
Das Grundkonzept eines Stream-Readers besteht darin, ein XML-Dokument als Strom von Tokens darzustellen, ähnlich wie bei SAX. Der Hauptunterschied zwischen QXmlStreamReader und SAX liegt darin, wie diese XML-Tokens ausgegeben werden. Bei SAX muss die Anwendung Handler (Callback-Funktionen) bereitstellen, die sogenannte XML-Ereignisse vom Parser nach dessen eigenem Ermessen empfangen. Bei QXmlStreamReader steuert der Anwendungscode selbst die Schleife und ruft Token nach Bedarf nacheinander vom Reader ab. Dies geschieht durch den Aufruf von ` readNext()`, wobei der Reader aus dem Eingabestrom liest, bis er das nächste Token vervollständigt hat; an diesem Punkt gibt er ` tokenType()` zurück. Eine Reihe praktischer Funktionen, darunter ` isStartElement()` und ` text()`, kann dann verwendet werden, um das Token zu untersuchen und Informationen darüber zu erhalten, was gelesen wurde. Der große Vorteil dieses „Pulling“-Ansatzes liegt in der Möglichkeit, damit rekursive Abwärtsparser zu erstellen, was bedeutet, dass Sie Ihren XML-Parsing-Code einfach in verschiedene Methoden oder Klassen aufteilen können. Dies erleichtert es, den eigenen Zustand der Anwendung beim Parsen von XML im Blick zu behalten.
Eine typische Schleife mit QXmlStreamReader sieht wie folgt aus:
QXmlStreamReader xml;
//...
while (!xml.atEnd()) {
xml.readNext();
//... do processing
}
if (xml.hasError()) {
//... do error handling
}QXmlStreamReader ist ein nicht validierender, nur vorwärts arbeitender XML-1.0-Parser für wohlgeformte Dokumente. Er verarbeitet keine externen geparsten Entitäten und führt keine DTD-Validierung durch. Solange kein Fehler auftritt, kann sich die Anwendung auf die folgenden Garantien verlassen:
- Der XML-Inhalt erfüllt die Kriterien des W3C für wohlgeformtes XML 1.0
- Verweise auf interne Entitäten werden durch den korrekten Ersatztext ersetzt.
- Attribute werden gemäß der internen Teilmenge „ DTD “ normalisiert oder hinzugefügt.
- Token werden in der für ein wohlgeformtes Dokument korrekten Reihenfolge bereitgestellt.
- Ein „ StartDocument “-Token (falls vorhanden) erscheint vor allen anderen Elementen, mit Ausnahme von Kommentaren und Verarbeitungsanweisungen.
- Es ist höchstens ein DOCTYPE-Element (ein Token vom Typ „ DTD “) vorhanden, und falls ja, erscheint es vor jedem anderen Inhalt (abgesehen von „ StartDocument “, Kommentaren und Verarbeitungsanweisungen).
Insbesondere gilt: Sobald ein Token vom Typ „ StartElement “, „ EndElement “, „ Characters “, „ EntityReference “ oder „ EndDocument “ erkannt wird, werden keine Token vom Typ „ StartDocument “ oder „DTD“ mehr erkannt. Ist ein solches Token im Eingabestrom an einer falschen Stelle vorhanden, wird ein Fehler ausgelöst.
Hinweis: Die Token-Typen „ Comment “ und „ ProcessingInstruction “ können an beliebiger Stelle im Stream vorkommen.
Tritt beim Parsen ein Fehler auf, geben „ atEnd()“ und „ hasError()“ den Wert „true“ zurück, und „ error()“ gibt den aufgetretenen Fehler zurück. Die Funktionen „ errorString()“, „ lineNumber()“, „ columnNumber()“ und „ characterOffset()“ dienen zum Erstellen einer entsprechenden Fehler- oder Warnmeldung. Um den Anwendungscode zu vereinfachen, enthält QXmlStreamReader einen Mechanismus namens „ raiseError()“, mit dem Sie benutzerdefinierte Fehler auslösen können, die die beschriebene Fehlerbehandlung aktivieren.
Das Beispiel „QXmlStream Bookmarks“ veranschaulicht, wie man die rekursive Abstiegstechnik nutzt, um eine XML-Lesezeichen-Datei (XBEL) mit einem Stream-Reader zu lesen.
Namensräume
QXmlStream erkennt und löst XML-Namespaces auf. Beispielsweise gibt bei einem „ StartElement “ die Funktion „ namespaceUri()“ den Namespace zurück, in dem sich das Element befindet, und „ name()“ gibt den lokalen Namen des Elements zurück. Die Kombination aus „ namespaceUri “ und „name“ identifiziert ein Element eindeutig. Wenn in den vom Reader geparsten XML-Entitäten kein Namespace-Präfix deklariert wurde, ist „ namespaceUri “ leer.
Wenn Sie XML-Daten analysieren, die Namespaces nicht gemäß der XML-Spezifikation verwenden oder gar keine Namespaces nutzen, können Sie stattdessen die qualifiedName() des Elements verwenden. Ein qualifizierter Name besteht aus dem „ prefix “ des Elements, gefolgt von einem Doppelpunkt und dem lokalen „ name “ des Elements – genau so, wie das Element in den Roh-XML-Daten erscheint. Da die Zuordnung von „ namespaceUri “ zum Präfix weder eindeutig noch universell ist, sollte „ qualifiedName “ bei Namespace-konformen XML-Daten vermieden werden.
Um eigenständige Dokumente zu analysieren, die nicht deklarierte Namespace-Präfixe verwenden, können Sie die Namespace-Verarbeitung mit der Eigenschaft „ namespaceProcessing “ vollständig deaktivieren.
Inkrementelles Parsen
QXmlStreamReader ist ein inkrementeller Parser. Er kann den Fall bewältigen, dass das Dokument nicht auf einmal geparst werden kann, weil es in Teilmengen eintrifft (z. B. aus mehreren Dateien oder über eine Netzwerkverbindung). Wenn dem Reader die Daten ausgehen, bevor das gesamte Dokument analysiert wurde, meldet er einen „ PrematureEndOfDocumentError “-Fehler. Wenn weitere Daten eintreffen – sei es durch einen Aufruf von ` addData()` oder weil über die Netzwerk device() weitere Daten verfügbar sind –, erholt sich der Reader vom Fehler „ PrematureEndOfDocumentError “ und setzt die Analyse der neuen Daten mit dem nächsten Aufruf von ` readNext()` fort.
Wenn Ihre Anwendung beispielsweise Daten aus dem Netzwerk mithilfe von ` network access manager` liest, würden Sie einen ` network request ` an den Manager senden und im Gegenzug einen ` network reply ` erhalten. Da ein „ QNetworkReply “ ein „ QIODevice “ ist, verbinden Sie dessen Signal „ readyRead()“ mit einem benutzerdefinierten Slot, z. B. „ slotReadyRead() “ in dem Codeausschnitt, der in der Erläuterung zu „ QNetworkAccessManager “ gezeigt wird. In diesem Slot lesen Sie alle verfügbaren Daten mit „ readAll()“ ein und übergeben sie mithilfe von „ addData()“ an den XML-Stream-Reader. Anschließend rufen Sie Ihre benutzerdefinierte Parsing-Funktion auf, die die XML-Ereignisse aus dem Reader ausliest.
Leistung und Speicherverbrauch
Der `QXmlStreamReader` ist von seiner Konzeption her speicherfreundlich, da er nicht den gesamten XML-Dokumentbaum im Speicher ablegt, sondern nur das aktuelle Token zum Zeitpunkt seiner Ausgabe. Zudem vermeidet QXmlStreamReader die vielen kleinen String-Zuweisungen, die normalerweise erforderlich sind, um ein XML-Dokument auf eine komfortable und Qt-typische API abzubilden. Dies geschieht, indem alle String-Daten als ` QStringView ` statt als echte ` QString `-Objekte gemeldet werden. Der Aufruf von ` toString()` auf eines dieser Objekte liefert ein entsprechendes echtes ` QString `-Objekt zurück.
Dokumentation zu Mitgliedstypen
enum QXmlStreamReader::Error
Diese Enumeration definiert verschiedene Fehlerfälle
| Konstante | Wert | Beschreibung |
|---|---|---|
QXmlStreamReader::NoError | 0 | Es ist kein Fehler aufgetreten. |
QXmlStreamReader::CustomError | 2 | Mit ` raiseError()` wurde ein benutzerdefinierter Fehler ausgelöst |
QXmlStreamReader::NotWellFormedError | 3 | Der Parser hat intern einen Fehler ausgelöst, da das gelesene XML nicht wohlgeformt war. |
QXmlStreamReader::PrematureEndOfDocumentError | 4 | Der Eingabestrom endete, bevor ein wohlgeformtes XML-Dokument geparst wurde. Eine Wiederherstellung nach diesem Fehler ist möglich, wenn weitere XML-Daten im Strom eintreffen – entweder durch Aufruf von ` addData()` oder durch Warten auf deren Eintreffen mit ` device()`. |
QXmlStreamReader::UnexpectedElementError | 1 | Der Parser ist auf ein Element oder ein Token gestoßen, das von den erwarteten abweicht. |
enum QXmlStreamReader::ReadElementTextBehaviour
Diese Enumeration legt die verschiedenen Verhaltensweisen von ` readElementText()` fest.
| Konstante | Wert | Beschreibung |
|---|---|---|
QXmlStreamReader::ErrorOnUnexpectedElement | 0 | Löst eine ` UnexpectedElementError ` aus und gibt den bisher gelesenen Text zurück, wenn ein untergeordnetes Element gefunden wird. |
QXmlStreamReader::IncludeChildElements | 1 | Fügt den Text aus untergeordneten Elementen rekursiv ein. |
QXmlStreamReader::SkipChildElements | 2 | Kind-Elemente überspringen. |
enum QXmlStreamReader::TokenType
Diese Enumeration gibt die Art des Tokens an, das der Reader gerade gelesen hat.
| Konstante | Wert | Beschreibung |
|---|---|---|
QXmlStreamReader::NoToken | 0 | Das Lesegerät hat noch nichts gelesen. |
QXmlStreamReader::Invalid | 1 | Es ist ein Fehler aufgetreten, der in ` error()` und ` errorString()` gemeldet wird. |
QXmlStreamReader::StartDocument | 2 | Der Reader meldet die XML-Versionsnummer in ` documentVersion()` und die im XML-Dokument angegebene Kodierung in ` documentEncoding()`. Wenn das Dokument als „standalone“ deklariert ist, gibt ` isStandaloneDocument()` den Wert ` true` zurück; andernfalls gibt es den Wert ` false` zurück. |
QXmlStreamReader::EndDocument | 3 | Der Reader meldet das Ende des Dokuments. |
QXmlStreamReader::StartElement | 4 | Der Reader meldet den Beginn eines Elements mit „ namespaceUri “() und „ name “(). Leere Elemente werden ebenfalls als „StartElement“ gemeldet, unmittelbar gefolgt von „EndElement“. Die Hilfsfunktion „ readElementText “() kann aufgerufen werden, um den gesamten Inhalt bis zum entsprechenden „EndElement“ zu verketteten. Attribute werden in „ attributes “() gemeldet, Namespace-Deklarationen in „ namespaceDeclarations “(). |
QXmlStreamReader::EndElement | 5 | Der Reader meldet das Ende eines Elements mit „ namespaceUri()“ und „ name()“. |
QXmlStreamReader::Characters | 6 | Der Reader meldet Zeichen in „ text()“. Wenn es sich bei den Zeichen ausschließlich um Leerzeichen handelt, gibt „ isWhitespace()“ „ true “ zurück. Wenn die Zeichen aus einem CDATA-Abschnitt stammen, gibt „ isCDATA()“ „ true “ zurück. |
QXmlStreamReader::Comment | 7 | Der Reader meldet einen Kommentar in text(). |
QXmlStreamReader::DTD | 8 | Der Reader meldet eine DTD in text(), Notationsdeklarationen in notationDeclarations() und Entitätsdeklarationen in entityDeclarations(). Details zur DTD-Deklaration werden in dtdName(), dtdPublicId() und dtdSystemId() gemeldet. |
QXmlStreamReader::EntityReference | 9 | Der Reader meldet eine Entitätsreferenz, die nicht aufgelöst werden konnte. Der Name der Referenz ist unter name() zu finden, der Ersatztext unter text(). |
QXmlStreamReader::ProcessingInstruction | 10 | Der Reader meldet eine Verarbeitungsanweisung in processingInstructionTarget() und processingInstructionData(). |
Eigenschaftsdokumentation
namespaceProcessing : bool
Diese Eigenschaft enthält das Flag für die Namespace-Verarbeitung des Stream-Readers.
Diese Eigenschaft steuert, ob der Stream-Reader Namespaces verarbeitet oder nicht. Ist sie aktiviert, verarbeitet der Reader Namespaces, andernfalls nicht.
Standardmäßig ist die Namespace-Verarbeitung aktiviert.
Zugriffsfunktionen:
| bool | namespaceProcessing() const |
| void | setNamespaceProcessing(bool) |
Dokumentation zu den Mitgliedsfunktionen
QXmlStreamReader::QXmlStreamReader()
Erstellt einen Stream-Reader.
Siehe auch setDevice() und addData().
[explicit] QXmlStreamReader::QXmlStreamReader(QAnyStringView data)
Erstellt einen neuen Stream-Reader, der aus ` data` liest.
Hinweis: In Qt-Versionen vor 6.5 war dieser Konstruktor für ` QString ` und ` const char*` überladen.
Siehe auch ` addData()`, ` clear()` und ` setDevice()`.
[explicit] QXmlStreamReader::QXmlStreamReader(QIODevice *device)
Erstellt einen neuen Stream-Reader, der aus device liest.
Siehe auch setDevice() und clear().
[explicit] QXmlStreamReader::QXmlStreamReader(const QByteArray &data)
Erstellt einen neuen Stream-Reader, der aus „ data “ liest.
Dies ist eine überladene Funktion.
Siehe auch addData(), clear() und setDevice().
[noexcept] QXmlStreamReader::~QXmlStreamReader()
Zerstört den Leser.
void QXmlStreamReader::addData(QAnyStringView data)
Fügt dem Reader weitere „ data “ hinzu. Diese Funktion führt keine Aktion aus, wenn der Reader über „ device()“ verfügt.
Hinweis: In Qt-Versionen vor 6.5 war diese Funktion für ` QString ` und ` const char*` überladen.
Siehe auch readNext() und clear().
void QXmlStreamReader::addData(const QByteArray &data)
Fügt dem Reader weitere „ data “ hinzu. Diese Funktion führt keine Aktion aus, wenn der Reader bereits über ein „ device()“ verfügt.
Dies ist eine überladene Funktion.
Siehe auch ` readNext()` und ` clear()`.
void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)
Fügt einen „ extraNamespaceDeclaration “ hinzu. Die Deklaration gilt für die untergeordneten Elemente des aktuellen Elements oder – sollte die Funktion aufgerufen werden, bevor Elemente gelesen wurden – für das gesamte XML-Dokument.
Siehe auch namespaceDeclarations(), addExtraNamespaceDeclarations() und setNamespaceProcessing().
void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)
Fügt einen Vektor von Deklarationen hinzu, die unter extraNamespaceDeclarations angegeben sind.
Siehe auch namespaceDeclarations() und addExtraNamespaceDeclaration().
bool QXmlStreamReader::atEnd() const
Gibt ` true ` zurück, wenn der Reader bis zum Ende des XML-Dokuments gelesen hat oder wenn ein ` error()` aufgetreten ist und das Lesen abgebrochen wurde. Andernfalls wird ` false` zurückgegeben.
Wenn atEnd() und hasError() „true“ zurückgeben und error() „ PrematureEndOfDocumentError “ zurückgibt, bedeutet dies, dass das XML bisher wohlgeformt ist, aber noch kein vollständiges XML-Dokument geparst wurde. Der nächste XML-Abschnitt kann mit ` addData()` hinzugefügt werden, wenn das XML aus einem ` QByteArray` gelesen wird, oder indem auf das Eintreffen weiterer Daten gewartet wird, wenn das XML aus einem ` QIODevice` gelesen wird. In beiden Fällen gibt `atEnd()` „false“ zurück, sobald weitere Daten verfügbar sind.
Siehe auch „ hasError()“, „ error()“, „ device()“ und „ QIODevice::atEnd()“.
QXmlStreamAttributes QXmlStreamReader::attributes() const
Gibt die Attribute eines ` StartElement` zurück.
qint64 QXmlStreamReader::characterOffset() const
Gibt den aktuellen Zeichenversatz zurück, beginnend bei 0.
Siehe auch lineNumber() und columnNumber().
void QXmlStreamReader::clear()
Entfernt alle „ device()“-Elemente oder Daten aus dem Reader und setzt dessen internen Zustand auf den Ausgangszustand zurück.
Siehe auch addData().
qint64 QXmlStreamReader::columnNumber() const
Gibt die aktuelle Spaltennummer zurück, beginnend mit 0.
Siehe auch lineNumber() und characterOffset().
QIODevice *QXmlStreamReader::device() const
Gibt das aktuelle Gerät zurück, das der QXmlStreamReader zugeordnet ist, oder nullptr, falls kein Gerät zugewiesen wurde.
Siehe auch setDevice().
QStringView QXmlStreamReader::documentEncoding() const
Wenn der Parameter „ tokenType()“ den Wert „ StartDocument “ hat, gibt diese Funktion die in der XML-Deklaration angegebene Kodierungszeichenfolge zurück. Andernfalls wird eine leere Zeichenfolge zurückgegeben.
QStringView QXmlStreamReader::documentVersion() const
Wenn der Parameter „ tokenType()“ den Wert „ StartDocument “ hat, gibt diese Funktion die in der XML-Deklaration angegebene Versionszeichenfolge zurück. Andernfalls wird eine leere Zeichenfolge zurückgegeben.
QStringView QXmlStreamReader::dtdName() const
Wenn der Parameter „ tokenType()“ den Wert „ DTD “ hat, gibt diese Funktion den Namen der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.
QStringView QXmlStreamReader::dtdPublicId() const
Wenn die Funktion „ tokenType()“ den Wert „ DTD “ zurückgibt, gibt diese Funktion den öffentlichen Bezeichner der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.
QStringView QXmlStreamReader::dtdSystemId() const
Wenn der Wert von „ tokenType()“ „ DTD “ lautet, gibt diese Funktion die Systemkennung der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.
QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const
Wenn der tokenType() den Wert „ DTD “ hat, gibt diese Funktion die unparsierten (externen) Entitätsdeklarationen der DTD zurück. Andernfalls wird ein leerer Vektor zurückgegeben.
Die Klasse „ QXmlStreamEntityDeclarations “ ist als „ QList “ von „ QXmlStreamEntityDeclaration “ definiert.
int QXmlStreamReader::entityExpansionLimit() const
Gibt die maximale Zeichenanzahl zurück, auf die sich eine einzelne Entität ausdehnen darf. Wenn eine einzelne Entität über die angegebene Grenze hinauswächst, gilt das Dokument als nicht wohlgeformt.
Siehe auch setEntityExpansionLimit.
QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const
Gibt den Entity-Resolver zurück oder „ nullptr “, falls kein Entity-Resolver vorhanden ist.
Siehe auch setEntityResolver().
QXmlStreamReader::Error QXmlStreamReader::error() const
Gibt den Typ des aktuellen Fehlers zurück oder „ NoError “, wenn kein Fehler aufgetreten ist.
Siehe auch „ errorString()“ und „ raiseError()“.
QString QXmlStreamReader::errorString() const
Gibt die Fehlermeldung zurück, die mit ` raiseError()` festgelegt wurde.
Siehe auch „ error()“, „ lineNumber()“, „ columnNumber()“ und „ characterOffset()“.
bool QXmlStreamReader::hasError() const
Gibt „ true “ zurück, wenn ein Fehler aufgetreten ist, andernfalls „ false “.
Siehe auch errorString() und error().
[since 6.6] bool QXmlStreamReader::hasStandaloneDeclaration() const
Gibt „ true “ zurück, wenn dieses Dokument eine explizite Standalone-Deklaration enthält (kann „yes“ oder „no“ lauten); andernfalls wird „ false “ zurückgegeben;
Wenn keine XML-Deklaration geparst wurde, gibt diese Funktion „ false “ zurück.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch ` isStandaloneDocument()`.
bool QXmlStreamReader::isCDATA() const
Gibt „ true “ zurück, wenn der Reader Zeichen meldet, die aus einem CDATA-Abschnitt stammen; andernfalls wird „ false “ zurückgegeben.
Siehe auch isCharacters() und text().
bool QXmlStreamReader::isCharacters() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ Characters “ ist; andernfalls wird „ false “ zurückgegeben.
Siehe auch isWhitespace() und isCDATA().
bool QXmlStreamReader::isComment() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ Comment “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isDTD() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ DTD “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isEndDocument() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ EndDocument “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isEndElement() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ EndElement “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isEntityReference() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ EntityReference “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isProcessingInstruction() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ ProcessingInstruction “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isStandaloneDocument() const
Gibt „ true “ zurück, wenn dieses Dokument in der XML-Deklaration als eigenständiges Dokument deklariert wurde; andernfalls wird „ false “ zurückgegeben.
Wenn keine XML-Deklaration geparst wurde, gibt diese Funktion „ false “ zurück.
Siehe auch hasStandaloneDeclaration().
bool QXmlStreamReader::isStartDocument() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ StartDocument “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isStartElement() const
Gibt „ true “ zurück, wenn „ tokenType()“ gleich „ StartElement “ ist; andernfalls wird „ false “ zurückgegeben.
bool QXmlStreamReader::isWhitespace() const
Gibt „ true “ zurück, wenn der Reader Zeichen meldet, die ausschließlich aus Leerzeichen bestehen; andernfalls wird „ false “ zurückgegeben.
Siehe auch isCharacters() und text().
qint64 QXmlStreamReader::lineNumber() const
Gibt die aktuelle Zeilennummer zurück, beginnend mit 1.
Siehe auch columnNumber() und characterOffset().
QStringView QXmlStreamReader::name() const
Gibt den lokalen Namen eines „ StartElement “, „ EndElement “ oder „ EntityReference “ zurück.
Siehe auch namespaceUri() und qualifiedName().
QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const
Wenn der tokenType() den Wert „ StartElement “ hat, gibt diese Funktion die Namespace-Deklarationen des Elements zurück. Andernfalls wird ein leerer Vektor zurückgegeben.
Die Klasse ` QXmlStreamNamespaceDeclarations ` ist als ` QList ` von ` QXmlStreamNamespaceDeclaration` definiert.
Siehe auch „ addExtraNamespaceDeclaration()“ und „ addExtraNamespaceDeclarations()“.
QStringView QXmlStreamReader::namespaceUri() const
Gibt den namespaceUri eines „ StartElement “ oder „ EndElement “ zurück.
Siehe auch name() und qualifiedName().
QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const
Wenn der tokenType() den Wert „ DTD “ hat, gibt diese Funktion die Notationsdeklarationen der DTD zurück. Andernfalls wird ein leerer Vektor zurückgegeben.
Die Klasse „ QXmlStreamNotationDeclarations “ ist als „ QList “ von „ QXmlStreamNotationDeclaration “ definiert.
QStringView QXmlStreamReader::prefix() const
Gibt das Präfix eines StartElement oder EndElement zurück.
Siehe auch name() und qualifiedName().
QStringView QXmlStreamReader::processingInstructionData() const
Gibt die Daten eines ` ProcessingInstruction` zurück.
QStringView QXmlStreamReader::processingInstructionTarget() const
Gibt das Ziel eines ` ProcessingInstruction` zurück.
QStringView QXmlStreamReader::qualifiedName() const
Gibt den qualifizierten Namen eines StartElement oder EndElement zurück;
Ein qualifizierter Name ist der Rohname eines Elements in den XML-Daten. Er besteht aus dem Namespace-Präfix, gefolgt von einem Doppelpunkt und dem lokalen Namen des Elements. Da das Namespace-Präfix nicht eindeutig ist (dasselbe Präfix kann auf verschiedene Namespaces verweisen und verschiedene Präfixe können auf denselben Namespace verweisen), sollten Sie nicht `qualifiedName()` verwenden, sondern die aufgelöste Form ` namespaceUri()` und den lokalen Namen des Attributs ` name()`.
Siehe auch ` name()`, ` prefix()` und ` namespaceUri()`.
void QXmlStreamReader::raiseError(const QString &message = QString())
Löst einen benutzerdefinierten Fehler mit einem optionalen Fehler message aus.
Siehe auch ` error()` und ` errorString()`.
QString QXmlStreamReader::readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement)
Hilfsfunktion, die aufgerufen wird, wenn ein „ StartElement “ gelesen wurde. Liest bis zum entsprechenden „ EndElement “ und gibt den gesamten dazwischenliegenden Text zurück. Wenn kein Fehler auftritt, lautet das aktuelle Token (siehe „ tokenType()“) nach dem Aufruf dieser Funktion „ EndElement “.
Die Funktion fügt ` text()` an, wenn sie entweder die Tokens ` Characters ` oder ` EntityReference ` liest, überspringt jedoch ` ProcessingInstruction ` und ` Comment`. Ist das aktuelle Token nicht ` StartElement`, wird eine leere Zeichenkette zurückgegeben.
Die Ausnahme „ behaviour “ definiert, was geschieht, falls etwas anderes gelesen wird, bevor „ EndElement “ erreicht wird. Die Funktion kann den Text aus untergeordneten Elementen einbeziehen (nützlich beispielsweise für HTML), untergeordnete Elemente ignorieren oder eine „ UnexpectedElementError “-Ausnahme auslösen und das bisher Gelesene zurückgeben (Standard).
QXmlStreamReader::TokenType QXmlStreamReader::readNext()
Liest das nächste Token und gibt dessen Typ zurück.
Mit einer Ausnahme gilt: Sobald von `readNext()` ein ` error()` gemeldet wird, ist ein weiteres Lesen des XML-Stroms nicht mehr möglich. Dann gibt ` atEnd()` ` true` zurück, ` hasError()` gibt ` true` zurück und diese Funktion gibt ` QXmlStreamReader::Invalid` zurück.
Eine Ausnahme bildet der Fall, in dem ` error()` den Wert ` PrematureEndOfDocumentError` zurückgibt. Dieser Fehler wird gemeldet, wenn das Ende eines ansonsten wohlgeformten XML-Blocks erreicht wird, dieser Block jedoch kein vollständiges XML-Dokument darstellt. In diesem Fall kann das Parsen fortgesetzt werden, indem „ addData()“ aufgerufen wird, um den nächsten XML-Abschnitt hinzuzufügen, wenn der Stream aus einem „ QByteArray “ gelesen wird, oder indem auf das Eintreffen weiterer Daten gewartet wird, wenn der Stream aus einem „ device()“ gelesen wird.
Siehe auch tokenType() und tokenString().
bool QXmlStreamReader::readNextStartElement()
Liest bis zum nächsten Startelement innerhalb des aktuellen Elements. Gibt „ true “ zurück, wenn ein Startelement erreicht wurde. Wenn das Endelement erreicht wurde oder ein Fehler aufgetreten ist, wird „false“ zurückgegeben.
Das aktuelle Element ist das Element, das dem zuletzt geparsten Startelement entspricht, für das noch kein passendes Endelement erreicht wurde. Wenn der Parser das Endelement erreicht hat, wird das übergeordnete Element zum aktuellen Element.
Dies ist eine Komfortfunktion für den Fall, dass Sie sich ausschließlich mit dem Parsen von XML-Elementen befassen. Das QXmlStream-Beispiel „Bookmarks“ nutzt diese Funktion ausgiebig.
Siehe auch „ readNext()“.
[since 6.10] QString QXmlStreamReader::readRawInnerData()
Liest den rohen XML-Inhalt des aktuellen Elements aus und gibt ihn zurück. Diese Funktion ist nützlich, um den vollständigen Inhalt eines Elements abzurufen, einschließlich verschachtelter Tags, Text, Kommentare, Verarbeitungsanweisungen, CDATA-Abschnitte und anderer Markups – unter Beibehaltung der ursprünglichen XML-Struktur.
Das aktuelle Element ist das Element, das dem zuletzt geparsten Startelement entspricht, für das noch kein passendes Endelement erreicht wurde. Wenn der Parser das Endelement erreicht hat, wird das übergeordnete Element zum aktuellen Element.
Hinweis: In der DTD definierteEntitätsreferenzen werden während des Parsens aufgelöst und als Klartext zurückgegeben, da DTD-Deklarationen separat verarbeitet werden und nicht Teil des Elementinhalts sind. Nur die fünf vordefinierten XML-Entitäten (<, >, &, ', ") werden in der Ausgabe erneut mit Escape-Zeichen versehen.
Diese Funktion wurde in Qt 6.10 eingeführt.
void QXmlStreamReader::setDevice(QIODevice *device)
Setzt das aktuelle Gerät auf „ device “. Durch das Festlegen des Geräts wird der Stream in seinen Ausgangszustand zurückgesetzt.
Siehe auch „ device()“ und „ clear()“.
void QXmlStreamReader::setEntityExpansionLimit(int limit)
Legt die maximale Zeichenanzahl fest, auf die eine einzelne Entität erweitert werden darf ( limit). Wenn eine einzelne Entität über die angegebene Grenze hinaus erweitert wird, gilt das Dokument als nicht wohlgeformt.
Diese Begrenzung dient dazu, DoS-Angriffe beim Laden unbekannter XML-Dokumente zu verhindern, bei denen eine rekursive Entitätsausweitung andernfalls den gesamten verfügbaren Speicher belasten könnte.
Der Standardwert für diese Eigenschaft beträgt 4096 Zeichen.
Der Mindestwert beträgt eins (1), um die integrierten XML-Entitäten (< usw.) zu unterstützen.
Siehe auch entityExpansionLimit.
void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)
Erzeugt aus resolver das neue entityResolver().
Der Stream-Reader übernimmt nicht die Verantwortung für den Resolver. Es liegt in der Verantwortung des Aufrufers, sicherzustellen, dass der Resolver während der gesamten Lebensdauer des Stream-Reader-Objekts gültig ist oder bis ein anderer Resolver oder ein anderes ` nullptr ` festgelegt wird.
Siehe auch ` entityResolver()` ().
void QXmlStreamReader::skipCurrentElement()
Liest bis zum Ende des aktuellen Elements und überspringt dabei alle untergeordneten Knoten. Diese Funktion ist nützlich, um unbekannte Elemente zu überspringen.
Das aktuelle Element ist das Element, das mit dem zuletzt geparsten Startelement übereinstimmt und für das noch kein passendes Endelement erreicht wurde. Wenn der Parser das Endelement erreicht hat, wird das übergeordnete Element zum aktuellen Element.
QStringView QXmlStreamReader::text() const
Gibt den Text von Characters, Comment, DTD oder EntityReference zurück.
QString QXmlStreamReader::tokenString() const
Gibt das aktuelle Token des Readers als Zeichenkette zurück.
Siehe auch ` tokenType()`.
QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const
Gibt den Typ des aktuellen Tokens zurück.
Das aktuelle Token kann auch mit den Hilfsfunktionen ` isStartDocument()`, ` isEndDocument()`, ` isStartElement()`, ` isEndElement()`, ` isCharacters()`, ` isComment()`, ` isDTD()`, ` isEntityReference()` und ` isProcessingInstruction()` abgefragt werden.
Siehe auch tokenString().
© 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.