QXmlStreamReader Class

Die Klasse QXmlStreamReader bietet einen schnellen Parser zum Lesen von wohlgeformtem XML ü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

Hinweis: Alle Funktionen in 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

Ö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()
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

Detaillierte Beschreibung

QXmlStreamReader bietet eine einfache Streaming-API zum Parsen von wohlgeformtem XML. Es ist eine Alternative zum ersten Laden des kompletten XML in einen DOM-Baum (siehe QDomDocument). QXmlStreamReader liest Daten entweder aus einem QIODevice (siehe setDevice()), oder aus einem rohen QByteArray (siehe addData()).

Qt bietet QXmlStreamWriter für das Schreiben von XML.

Das Grundkonzept eines Stream-Readers besteht darin, ein XML-Dokument als einen Strom von Token zu melden, ähnlich wie bei SAX. Der Hauptunterschied zwischen QXmlStreamReader und SAX besteht darin , wie diese XML-Token gemeldet werden. Bei SAX muss die Anwendung Handler (Callback-Funktionen) bereitstellen, die sogenannte XML-Ereignisse vom Parser empfangen, wenn der Parser dies wünscht. Bei QXmlStreamReader steuert der Anwendungscode selbst die Schleife und holt die Token nacheinander aus dem Reader, wenn er sie braucht. Dies geschieht durch den Aufruf von readNext(), wobei das Lesegerät so lange aus dem Eingabestrom liest, bis es das nächste Token fertiggestellt hat, woraufhin es tokenType() zurückgibt. Eine Reihe von praktischen Funktionen, darunter isStartElement() und text(), können dann verwendet werden, um das Token zu untersuchen und Informationen darüber zu erhalten, was gelesen wurde. Der große Vorteil dieses Pulling-Ansatzes ist die Möglichkeit, damit rekursive Descent-Parser zu bauen, was bedeutet, dass Sie Ihren XML-Parsing-Code einfach in verschiedene Methoden oder Klassen aufteilen können. Dies macht es einfach, den eigenen Zustand der Anwendung beim Parsen von XML im Auge 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 wohlgeformter XML 1.0 Parser, der keine externen geparsten Entitäten enthält. Solange kein Fehler auftritt, kann der Anwendungscode also sicher sein, dass

  • die vom Stream-Reader gelieferten Daten die Kriterien des W3C für wohlgeformtes XML erfüllen,
  • die Token in einer gültigen Reihenfolge bereitgestellt werden.

Sofern QXmlStreamReader keinen Fehler auslöst, garantiert er Folgendes:

  • Alle Tags sind korrekt verschachtelt und geschlossen.
  • Verweise auf interne Entitäten wurden durch den korrekten Ersatztext ersetzt.
  • Die Attribute wurden normalisiert oder entsprechend der internen Untermenge der DTD hinzugefügt.
  • Token des Typs StartDocument kommen vor allen anderen, abgesehen von Kommentaren und Verarbeitungsanweisungen.
  • Es ist höchstens ein DOCTYPE-Element (ein Token des Typs DTD) vorhanden.
  • Wenn es vorhanden ist, erscheint das DOCTYPE-Element vor allen anderen Elementen, mit Ausnahme von StartDocument, Kommentaren und Verarbeitungsanweisungen.

Sobald ein Token des Typs StartElement, EndElement, Characters, EntityReference oder EndDocument vorhanden ist, werden keine Token des Typs StartDocument oder DTD mehr angezeigt. Wenn ein Token im Eingabestrom vorhanden ist, wird ein Fehler ausgelöst.

Hinweis: Die Token-Typen Comment und ProcessingInstruction können an beliebiger Stelle im Datenstrom erscheinen.

Wenn beim Parsen ein Fehler auftritt, geben atEnd() und hasError() true zurück, und error() gibt den aufgetretenen Fehler zurück. Die Funktionen errorString(), lineNumber(), columnNumber() und characterOffset() dienen dazu, eine entsprechende Fehler- oder Warnmeldung zu erstellen. Um den Anwendungscode zu vereinfachen, enthält QXmlStreamReader einen raiseError()-Mechanismus, mit dem Sie benutzerdefinierte Fehler auslösen können, die die gleiche beschriebene Fehlerbehandlung auslösen.

Das QXmlStream Bookmarks Beispiel veranschaulicht die Verwendung der rekursiven Abstiegstechnik zum Lesen einer XML-Lesezeichendatei (XBEL) mit einem Stream-Reader.

Namespaces

QXmlStream versteht XML-Namespaces und löst sie auf. Im Falle von StartElement beispielsweise gibt 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 parsen, die keine Namespaces gemäß der XML-Spezifikation oder überhaupt keine Namespaces verwenden, können Sie stattdessen den qualifiedName() des Elements verwenden. Ein qualifizierter Name ist der prefix() des Elements, gefolgt von einem Doppelpunkt, gefolgt von dem lokalen name() des Elements - genau so, wie das Element in den XML-Rohdaten erscheint. Da die Zuordnung namespaceUri zu Präfix weder eindeutig noch universell ist, sollte qualifiedName() für Namespace-konforme XML-Daten vermieden werden.

Um eigenständige Dokumente zu parsen, die nicht deklarierte Namespace-Präfixe verwenden, können Sie die Namespace-Verarbeitung mit der Eigenschaft namespaceProcessing vollständig abschalten.

Inkrementelles Parsen

QXmlStreamReader ist ein inkrementeller Parser. Er kann den Fall behandeln, dass das Dokument nicht auf einmal geparst werden kann, weil es in Stücken ankommt (z.B. aus mehreren Dateien oder über eine Netzwerkverbindung). Wenn dem Lesegerät die Daten ausgehen, bevor das gesamte Dokument geparst wurde, meldet es einen PrematureEndOfDocumentError. Wenn mehr Daten ankommen, entweder durch einen Aufruf von addData() oder weil mehr Daten über das Netzwerk device() verfügbar sind, erholt sich das Lesegerät vom PrematureEndOfDocumentError -Fehler und setzt das Parsen der neuen Daten mit dem nächsten Aufruf von readNext() fort.

Wenn Ihre Anwendung beispielsweise mit network access manager Daten aus dem Netzwerk liest, würden Sie eine network request an den Manager senden und im Gegenzug eine network reply erhalten. Da ein QNetworkReply ein QIODevice ist, verbinden Sie sein readyRead()-Signal mit einem benutzerdefinierten Slot, z. B. slotReadyRead() in dem in der Diskussion für QNetworkAccessManager gezeigten Codeschnipsel. In diesem Slot lesen Sie alle verfügbaren Daten mit readAll() und übergeben sie mit addData() an den XML-Stream-Reader. Anschließend rufen Sie Ihre benutzerdefinierte Parsing-Funktion auf, die die XML-Ereignisse aus dem Reader liest.

Leistung und Speicherverbrauch

QXmlStreamReader ist vom Design her speicherkonservativ, da er nicht den gesamten XML-Dokumentenbaum im Speicher speichert, sondern nur das aktuelle Token zum Zeitpunkt seiner Meldung. Darüber hinaus vermeidet QXmlStreamReader die vielen kleinen String-Zuweisungen, die normalerweise erforderlich sind, um ein XML-Dokument auf eine bequeme und Qt-artige API abzubilden. Er tut dies, indem er alle String-Daten als QStringView und nicht als echte QString Objekte meldet. Der Aufruf von toString() für eines dieser Objekte gibt ein entsprechendes reales QString Objekt zurück.

Dokumentation der Mitgliedstypen

enum QXmlStreamReader::Error

Diese Aufzählung spezifiziert verschiedene Fehlerfälle

KonstanteWertBeschreibung
QXmlStreamReader::NoError0Es ist kein Fehler aufgetreten.
QXmlStreamReader::CustomError2Ein benutzerdefinierter Fehler wurde mit raiseError() ausgelöst.
QXmlStreamReader::NotWellFormedError3Der Parser hat intern einen Fehler ausgelöst, weil das gelesene XML nicht wohlgeformt war.
QXmlStreamReader::PrematureEndOfDocumentError4Der Eingabestrom endete, bevor ein wohlgeformtes XML-Dokument geparst werden konnte. Dieser Fehler kann behoben werden, wenn mehr XML im Stream eintrifft, entweder durch den Aufruf von addData() oder durch Warten auf das Eintreffen auf device().
QXmlStreamReader::UnexpectedElementError1Der Parser ist auf ein Element oder Token gestoßen, das sich von den erwarteten unterscheidet.

enum QXmlStreamReader::ReadElementTextBehaviour

Diese Aufzählung spezifiziert die verschiedenen Verhaltensweisen von readElementText().

KonstanteWertBeschreibung
QXmlStreamReader::ErrorOnUnexpectedElement0Erzeugt ein UnexpectedElementError und gibt zurück, was bisher gelesen wurde, wenn ein untergeordnetes Element angetroffen wird.
QXmlStreamReader::IncludeChildElements1Rekursiv den Text von Kindelementen einschließen.
QXmlStreamReader::SkipChildElements2Überspringt untergeordnete Elemente.

enum QXmlStreamReader::TokenType

Diese Aufzählung gibt den Typ des Tokens an, den der Leser gerade gelesen hat.

KonstanteWertBeschreibung
QXmlStreamReader::NoToken0Der Leser hat noch nichts gelesen.
QXmlStreamReader::Invalid1Es ist ein Fehler aufgetreten, der in error() und errorString() gemeldet wird.
QXmlStreamReader::StartDocument2Der Reader meldet die XML-Versionsnummer in documentVersion() und die im XML-Dokument angegebene Kodierung in documentEncoding(). Wenn das Dokument als eigenständig deklariert ist, gibt isStandaloneDocument() true zurück, andernfalls false.
QXmlStreamReader::EndDocument3Der Reader meldet das Ende des Dokuments.
QXmlStreamReader::StartElement4Der Leser meldet den Beginn eines Elements mit namespaceUri() und name(). Leere Elemente werden ebenfalls als StartElement gemeldet, direkt gefolgt von EndElement. Die Komfortfunktion readElementText() kann aufgerufen werden, um alle Inhalte bis zum entsprechenden EndElement zu verketten. Attribute werden in attributes() gemeldet, Namespace-Deklarationen in namespaceDeclarations().
QXmlStreamReader::EndElement5Das Ende eines Elements meldet der Reader mit namespaceUri() und name().
QXmlStreamReader::Characters6Der Reader meldet Zeichen in text(). Wenn die Zeichen alle aus Leerzeichen bestehen, gibt isWhitespace() true zurück. Wenn die Zeichen aus einem CDATA-Abschnitt stammen, gibt isCDATA() true zurück.
QXmlStreamReader::Comment7Der Leser meldet einen Kommentar in text().
QXmlStreamReader::DTD8Der Leser meldet eine DTD in text(), Notationsdeklarationen in notationDeclarations(), und Entitätsdeklarationen in entityDeclarations(). Details der DTD-Deklaration werden in dtdName(), dtdPublicId() und dtdSystemId() gemeldet.
QXmlStreamReader::EntityReference9Der Reader meldet eine Entity-Referenz, die nicht aufgelöst werden konnte. Der Name des Verweises wird in name() gemeldet, der Ersatztext in text().
QXmlStreamReader::ProcessingInstruction10Der Leser meldet eine Verarbeitungsanweisung in processingInstructionTarget() und processingInstructionData().

Dokumentation der Eigenschaft

namespaceProcessing : bool

Diese Eigenschaft enthält das Namespace-Processing-Flag des Stream-Readers.

Diese Eigenschaft steuert, ob der Stream-Reader Namespaces verarbeitet oder nicht. Wenn sie aktiviert ist, verarbeitet der Reader Namespaces, andernfalls nicht.

Standardmäßig ist die Namespace-Verarbeitung aktiviert.

Zugriffsfunktionen:

bool namespaceProcessing() const
void setNamespaceProcessing(bool)

Dokumentation der Mitgliedsfunktionen

QXmlStreamReader::QXmlStreamReader()

Konstruiert einen Stream-Reader.

Siehe auch setDevice() und addData().

[explicit] QXmlStreamReader::QXmlStreamReader(QAnyStringView data)

Erzeugt einen neuen Stream-Reader, der von data liest.

Hinweis: In Qt-Versionen vor 6.5 wurde dieser Konstruktor für QString und const char* überladen.

Siehe auch addData(), clear(), und setDevice().

[explicit] QXmlStreamReader::QXmlStreamReader(QIODevice *device)

Erzeugt einen neuen Stream-Reader, der von device liest.

Siehe auch setDevice() und clear().

[explicit] QXmlStreamReader::QXmlStreamReader(const QByteArray &data)

Dies ist eine überladene Funktion.

Erzeugt einen neuen Stream-Reader, der von data liest.

Siehe auch addData(), clear(), und setDevice().

[noexcept] QXmlStreamReader::~QXmlStreamReader()

Zerstört das Lesegerät.

void QXmlStreamReader::addData(QAnyStringView data)

Fügt weitere data für den Leser hinzu. Diese Funktion macht nichts, wenn der Leser eine device() hat.

Hinweis: In Qt-Versionen vor 6.5 wurde diese Funktion für QString und const char* überladen.

Siehe auch readNext() und clear().

void QXmlStreamReader::addData(const QByteArray &data)

Dies ist eine überladene Funktion.

Fügt weitere data für den Leser hinzu, die er lesen kann. Diese Funktion bewirkt nichts, wenn der Leser eine device() hat.

Siehe auch readNext() und clear().

void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)

Fügt ein extraNamespaceDeclaration hinzu. Die Deklaration gilt für die Kinder des aktuellen Elements oder - falls die Funktion aufgerufen wird, bevor irgendwelche Elemente gelesen werden - 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, der durch extraNamespaceDeclarations angegeben wird.

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-Dokument bisher wohlgeformt wurde, aber noch kein vollständiges XML-Dokument geparst wurde. Das nächste XML-Stück kann mit addData() hinzugefügt werden, wenn das XML von einem QByteArray gelesen wird, oder durch Warten auf weitere Daten, wenn das XML von 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 einer StartElement zurück.

qint64 QXmlStreamReader::characterOffset() const

Gibt den aktuellen Zeichenoffset zurück, beginnend mit 0.

Siehe auch lineNumber() und columnNumber().

void QXmlStreamReader::clear()

Entfernt alle device() oder Daten aus dem Lesegerät 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 dem QXmlStreamReader zugeordnet ist, oder nullptr, wenn kein Gerät zugewiesen wurde.

Siehe auch setDevice().

QStringView QXmlStreamReader::documentEncoding() const

Wenn tokenType() StartDocument ist, gibt diese Funktion die in der XML-Deklaration angegebene Kodierungszeichenfolge zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.

QStringView QXmlStreamReader::documentVersion() const

Wenn tokenType() StartDocument ist, gibt diese Funktion die in der XML-Deklaration angegebene Versionszeichenfolge zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.

QStringView QXmlStreamReader::dtdName() const

Wenn tokenType() DTD ist, gibt diese Funktion den Namen der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.

QStringView QXmlStreamReader::dtdPublicId() const

Wenn tokenType() DTD ist, gibt diese Funktion den öffentlichen Bezeichner der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.

QStringView QXmlStreamReader::dtdSystemId() const

Wenn tokenType() DTD ist, gibt diese Funktion den Systemidentifikator der DTD zurück. Andernfalls wird eine leere Zeichenkette zurückgegeben.

QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const

Wenn tokenType() DTD ist, gibt diese Funktion die unparsed (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 Anzahl von Zeichen zurück, die ein einzelnes Element umfassen kann. Wenn ein einzelnes Element über das angegebene Limit hinausgeht, wird das Dokument als nicht wohlgeformt betrachtet.

Siehe auch setEntityExpansionLimit.

QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const

Gibt den Entitätsauflöser zurück, oder nullptr, wenn es keinen Entitätsauflöser gibt.

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() gesetzt 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 hat (kann 'ja' oder 'nein' sein); andernfalls false;

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 Leser 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ändig 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 Leser Zeichen meldet, die nur 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 eines EntityReference zurück.

Siehe auch namespaceUri() und qualifiedName().

QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const

Wenn tokenType() StartElement ist, 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 die NamespaceUri eines StartElement oder EndElement zurück.

Siehe auch name() und qualifiedName().

QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const

Wenn tokenType() DTD ist, 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 einer ProcessingInstruction zurück.

QStringView QXmlStreamReader::processingInstructionTarget() const

Gibt das Ziel einer ProcessingInstruction zurück.

QStringView QXmlStreamReader::qualifiedName() const

Gibt den qualifizierten Namen eines StartElement oder EndElement zurück;

Ein qualifizierter Name ist der rohe Name eines Elements in den XML-Daten. Er besteht aus dem Namespace-Präfix, gefolgt von einem Doppelpunkt, gefolgt von dem lokalen Namen des Elements. Da der Namespace-Präfix nicht eindeutig ist (derselbe Präfix kann auf verschiedene Namespaces verweisen und verschiedene Präfixe können auf denselben Namespace verweisen), sollten Sie nicht qualifiedName() verwenden, sondern den aufgelösten 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)

Convenience-Funktion, die aufgerufen wird, wenn eine StartElement gelesen wurde. Liest bis zum entsprechenden EndElement und gibt den gesamten dazwischen liegenden Text zurück. Wenn kein Fehler auftritt, ist das aktuelle Token (siehe tokenType()) nach dem Aufruf dieser Funktion EndElement.

Die Funktion verkettet text(), wenn sie entweder Characters oder EntityReference liest, überspringt aber ProcessingInstruction und Comment. Wenn das aktuelle Token nicht StartElement ist, wird ein leerer String zurückgegeben.

behaviour legt fest, was passiert, wenn etwas anderes gelesen wird, bevor EndElement erreicht wird. Die Funktion kann den Text von untergeordneten Elementen einschließen (nützlich z. B. für HTML), untergeordnete Elemente ignorieren oder UnexpectedElementError auslösen und das zurückgeben, was bisher gelesen wurde (Standard).

QXmlStreamReader::TokenType QXmlStreamReader::readNext()

Liest das nächste Token und gibt dessen Typ zurück.

Mit einer Ausnahme: Sobald ein error() von readNext() gemeldet wird, ist ein weiteres Lesen des XML-Streams nicht möglich. Dann gibt atEnd() true zurück, hasError() gibt true zurück, und diese Funktion gibt QXmlStreamReader::Invalid zurück.

Die Ausnahme ist, wenn error() PrematureEndOfDocumentError zurückgibt. Dieser Fehler wird gemeldet, wenn das Ende eines ansonsten wohlgeformten XML-Blocks erreicht ist, der Block aber kein vollständiges XML-Dokument darstellt. In diesem Fall kann das Parsen wieder aufgenommen werden, indem addData() aufgerufen wird, um das nächste XML-Stück hinzuzufügen, wenn der Stream von einem QByteArray gelesen wird, oder indem auf weitere Daten gewartet wird, wenn der Stream von 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, zu dem noch kein passendes Endelement erreicht wurde. Wenn der Parser das Endelement erreicht hat, wird das aktuelle Element zum Elternelement.

Dies ist eine praktische Funktion, wenn Sie sich nur mit dem Parsen von XML-Elementen beschäftigen. Das QXmlStream Bookmarks Beispiel macht ausgiebig Gebrauch von dieser Funktion.

Siehe auch readNext().

void QXmlStreamReader::setDevice(QIODevice *device)

Setzt das aktuelle Gerät auf device. Durch das Setzen des Geräts wird der Stream in seinen Ausgangszustand zurückgesetzt.

Siehe auch device() und clear().

void QXmlStreamReader::setEntityExpansionLimit(int limit)

Setzt die maximale Anzahl von Zeichen, die eine einzelne Entität umfassen darf, auf limit. Wenn eine einzelne Entität über das angegebene Limit hinaus expandiert, wird das Dokument nicht als wohlgeformt angesehen.

Der Grenzwert dient dazu, DoS-Angriffe beim Laden unbekannter XML-Dokumente zu verhindern, bei denen die rekursive Entity-Expansion ansonsten den gesamten verfügbaren Speicher erschöpfen könnte.

Der Standardwert für diese Eigenschaft ist 4096 Zeichen.

Siehe auch entityExpansionLimit.

void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)

Macht aus resolver den neuen entityResolver().

Der Stream-Reader übernimmt nicht das Eigentum am 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 nullptr gesetzt wird.

Siehe auch entityResolver().

void QXmlStreamReader::skipCurrentElement()

Liest bis zum Ende des aktuellen Elements und überspringt dabei alle Kindknoten. Diese Funktion ist nützlich, um unbekannte Elemente zu überspringen.

Das aktuelle Element ist das Element, das dem zuletzt geparsten Startelement entspricht, für das noch kein passendes Endelement gefunden wurde. Wenn der Parser das Endelement erreicht hat, wird das aktuelle Element zum Elternelement.

QStringView QXmlStreamReader::text() const

Gibt den Text von Characters, Comment, DTD, oder EntityReference zurück.

QString QXmlStreamReader::tokenString() const

Gibt das aktuelle Token des Lesers als String 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 Komfortfunktionen isStartDocument(), isEndDocument(), isStartElement(), isEndElement(), isCharacters(), isComment(), isDTD(), isEntityReference() und isProcessingInstruction() abgefragt werden.

Siehe auch tokenString().

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