En esta página

QXmlStreamReader Class

La clase QXmlStreamReader proporciona un analizador rápido para la lectura de documentos XML 1.0 bien formados a través de una sencilla API de streaming. Más...

Cabecera: #include <QXmlStreamReader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

enum Error { NoError, CustomError, NotWellFormedError, PrematureEndOfDocumentError, UnexpectedElementError }
enum ReadElementTextBehaviour { ErrorOnUnexpectedElement, IncludeChildElements, SkipChildElements }
enum TokenType { NoToken, Invalid, StartDocument, EndDocument, StartElement, …, ProcessingInstruction }

Propiedades

Funciones públicas

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

Descripción detallada

QXmlStreamReader proporciona una sencilla API de streaming para analizar documentos XML 1.0 bien formados. Es una alternativa a cargar primero el XML completo en un árbol DOM (véase QDomDocument). QXmlStreamReader lee datos de QIODevice (véase setDevice()), o de QByteArray sin procesar (véase addData()).

Nota: QXmlStreamReader sólo admite la versión 1.0 de XML. Los documentos que declaren cualquier otra versión, como "1.1", darán lugar a un error de análisis.

Qt proporciona QXmlStreamWriter para escribir XML.

El concepto básico de un lector de flujo es informar de un documento XML como un flujo de tokens, similar a SAX. La principal diferencia entre QXmlStreamReader y SAX es cómo se reportan estos tokens XML. Con SAX, la aplicación debe proporcionar handlers (funciones de callback) que reciban los llamados eventos XML del parser a conveniencia de éste. Con QXmlStreamReader, el propio código de la aplicación maneja el bucle y extrae tokens del lector, uno tras otro, a medida que los necesita. Esto se hace llamando a readNext(), donde el lector lee del flujo de entrada hasta que completa el siguiente token, momento en el que devuelve tokenType(). Un conjunto de funciones convenientes, incluyendo isStartElement() y text() pueden entonces ser usadas para examinar el token y obtener información sobre lo que ha sido leído. La gran ventaja de este enfoque es la posibilidad de construir analizadores descendentes recursivos con él, lo que significa que puedes dividir fácilmente tu código de análisis XML en diferentes métodos o clases. Esto facilita el seguimiento del propio estado de la aplicación al analizar XML.

Un bucle típico con QXmlStreamReader tiene este aspecto:

QXmlStreamReader xml;
//...
while (!xml.atEnd()) {
    xml.readNext();
    //... do processing
}
if (xml.hasError()) {
    //... do error handling
}

QXmlStreamReader es un analizador sintáctico XML 1.0 no validador y de sólo lectura para documentos bien formados. No procesa entidades externas analizadas ni realiza validación DTD. Mientras no se produzca ningún error, la aplicación puede confiar en las siguientes garantías:

  • El contenido XML satisface los criterios del W3C para XML 1.0 bien formado.
  • Las referencias a entidades internas se sustituyen por el texto de reemplazo correcto.
  • Los atributos se normalizan o añaden de acuerdo con el subconjunto interno DTD.
  • Los tokens se proporcionan en el orden correcto para un documento bien formado.
  • Un token StartDocument (si está presente) aparece antes de todos los demás elementos, aparte de los comentarios y las instrucciones de procesamiento.
  • Como máximo hay un elemento DOCTYPE (un token de tipo DTD), y si lo hay, aparece antes que cualquier otro contenido (aparte de StartDocument, los comentarios y las instrucciones de procesamiento).

En particular, una vez visto cualquier token de tipo StartElement, EndElement, Characters, EntityReference o EndDocument, no se verá ningún token de tipo StartDocument o DTD. Si hay alguno presente en el flujo de entrada, fuera de orden, se produce un error.

Nota: Los tokens de tipo Comment y ProcessingInstruction pueden aparecer en cualquier parte del flujo.

Si se produce un error durante el análisis sintáctico, atEnd() y hasError() devuelven true, y error() devuelve el error que se ha producido. Las funciones errorString(), lineNumber(), columnNumber() y characterOffset() sirven para construir un mensaje de error o advertencia apropiado. Para simplificar el código de la aplicación, QXmlStreamReader contiene un mecanismo raiseError() que permite lanzar errores personalizados que desencadenan la misma gestión de errores descrita.

El ejemplo de marcadores QXmlStream ilustra cómo utilizar la técnica de descenso recursivo para leer un archivo de marcadores XML (XBEL) con un lector de flujo.

Espacios de nombres

QXmlStream entiende y resuelve los espacios de nombres XML. Por ejemplo, en el caso de StartElement, namespaceUri() devuelve el espacio de nombres en el que se encuentra el elemento, y name() devuelve el nombre local del elemento. La combinación de namespaceUri y name identifica un elemento de forma única. Si no se ha declarado un prefijo de espacio de nombres en las entidades XML analizadas por el lector, namespaceUri estará vacío.

Si analiza datos XML que no utilizan espacios de nombres de acuerdo con la especificación XML o que no utilizan espacios de nombres en absoluto, puede utilizar el qualifiedName() del elemento en su lugar. Un nombre cualificado es el prefix() del elemento seguido de dos puntos y el name() local del elemento, exactamente como aparece el elemento en los datos XML sin procesar. Dado que la correspondencia namespaceUri a prefijo no es única ni universal, qualifiedName() debe evitarse para los datos XML conformes con el espacio de nombres.

Para analizar documentos independientes que utilizan prefijos de espacio de nombres no declarados, puede desactivar completamente el procesamiento de espacios de nombres con la propiedad namespaceProcessing.

Análisis incremental

QXmlStreamReader es un analizador incremental. Puede manejar el caso en que el documento no puede ser analizado de una sola vez porque llega en trozos (por ejemplo, desde varios archivos, o a través de una conexión de red). Cuando el lector se queda sin datos antes de haber analizado el documento completo, informa de un error PrematureEndOfDocumentError. Cuando llegan más datos, ya sea por una llamada a addData() o porque hay más datos disponibles a través de la red device(), el lector se recupera del error PrematureEndOfDocumentError y continúa analizando los nuevos datos con la siguiente llamada a readNext().

Por ejemplo, si su aplicación lee datos de la red utilizando un network access manager, emitiría un network request al gestor y recibiría un network reply a cambio. Dado que un QNetworkReply es un QIODevice, conectas su señal readyRead() a una ranura personalizada, por ejemplo slotReadyRead() en el fragmento de código mostrado en la discusión para QNetworkAccessManager. En esta ranura, se leen todos los datos disponibles con readAll() y se pasan al lector de flujo XML mediante addData(). A continuación, se llama a la función de análisis personalizada que lee los eventos XML del lector.

Rendimiento y consumo de memoria

QXmlStreamReader conserva memoria por diseño, ya que no almacena todo el árbol de documentos XML en memoria, sino sólo el token actual en el momento en que se informa. Además, QXmlStreamReader evita la gran cantidad de pequeñas asignaciones de cadenas que normalmente se necesitan para mapear un documento XML a una API conveniente y propia de Qt. Lo hace informando de todos los datos de cadena como QStringView en lugar de como objetos reales QString. Al llamar a toString() sobre cualquiera de esos objetos se devuelve un objeto real equivalente QString.

Documentación de los tipos de miembros

enum QXmlStreamReader::Error

Este enum especifica diferentes casos de error

ConstanteValorDescripción
QXmlStreamReader::NoError0No se ha producido ningún error.
QXmlStreamReader::CustomError2Se ha producido un error personalizado con raiseError()
QXmlStreamReader::NotWellFormedError3El analizador ha generado internamente un error debido a que el XML leído no estaba bien formado.
QXmlStreamReader::PrematureEndOfDocumentError4El flujo de entrada terminó antes de que se analizara un documento XML bien formado. Es posible recuperarse de este error si llega más XML al flujo, ya sea llamando a addData() o esperando a que llegue en device().
QXmlStreamReader::UnexpectedElementError1El analizador ha encontrado un elemento o token diferente de los esperados.

enum QXmlStreamReader::ReadElementTextBehaviour

Este enum especifica los diferentes comportamientos de readElementText().

ConstanteValorDescripción
QXmlStreamReader::ErrorOnUnexpectedElement0Lanza un UnexpectedElementError y devuelve lo leído hasta el momento cuando se encuentra un elemento hijo.
QXmlStreamReader::IncludeChildElements1Incluir recursivamente el texto de los elementos hijos.
QXmlStreamReader::SkipChildElements2Omitir elementos hijos.

enum QXmlStreamReader::TokenType

Este enum especifica el tipo de ficha que el lector acaba de leer.

ConstanteValorDescripción
QXmlStreamReader::NoToken0El lector aún no ha leído nada.
QXmlStreamReader::Invalid1Se ha producido un error, del que se informa en error() y errorString().
QXmlStreamReader::StartDocument2El lector informa del número de versión XML en documentVersion(), y de la codificación especificada en el documento XML en documentEncoding(). Si el documento se declara independiente, isStandaloneDocument() devuelve true; en caso contrario, devuelve false.
QXmlStreamReader::EndDocument3El lector informa del final del documento.
QXmlStreamReader::StartElement4El lector informa del inicio de un elemento con namespaceUri() y name(). Los elementos vacíos también se notifican como StartElement, seguido directamente de EndElement. Se puede llamar a la función readElementText() para concatenar todo el contenido hasta el EndElement correspondiente. Los atributos se indican en attributes() y las declaraciones de espacio de nombres en namespaceDeclarations().
QXmlStreamReader::EndElement5El lector informa del final de un elemento con namespaceUri() y name().
QXmlStreamReader::Characters6El lector informa de los caracteres en text(). Si todos los caracteres son espacios en blanco, isWhitespace() devuelve true. Si los caracteres proceden de una sección CDATA, isCDATA() devuelve true.
QXmlStreamReader::Comment7El lector informa de un comentario en text().
QXmlStreamReader::DTD8El lector informa de una DTD en text(), de declaraciones de notación en notationDeclarations() y de declaraciones de entidad en entityDeclarations(). Los detalles de la declaración DTD aparecen en dtdName(), dtdPublicId() y dtdSystemId().
QXmlStreamReader::EntityReference9El lector informa de una referencia de entidad que no se ha podido resolver. El nombre de la referencia se indica en name() y el texto de sustitución en text().
QXmlStreamReader::ProcessingInstruction10El lector informa de una instrucción de procesamiento en processingInstructionTarget() y processingInstructionData().

Documentación de propiedades

namespaceProcessing : bool

Esta propiedad contiene la bandera de procesamiento de espacios de nombres del lector de flujos.

Esta propiedad controla si el lector de flujos procesa o no los espacios de nombres. Si está habilitada, el lector procesa los espacios de nombres, de lo contrario no lo hace.

Por defecto, el procesamiento de espacios de nombres está activado.

Funciones de acceso:

bool namespaceProcessing() const
void setNamespaceProcessing(bool)

Documentación de funciones miembro

QXmlStreamReader::QXmlStreamReader()

Construye un lector de flujo.

Véase también setDevice() y addData().

[explicit] QXmlStreamReader::QXmlStreamReader(QAnyStringView data)

Crea un nuevo lector de flujo que lee de data.

Nota: En versiones de Qt anteriores a la 6.5, este constructor estaba sobrecargado para QString y const char*.

Ver también addData(), clear(), y setDevice().

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

Crea un nuevo lector de flujo que lee de device.

Véase también setDevice() y clear().

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

Crea un nuevo lector de flujo que lee de data.

Esta es una función sobrecargada.

Véase también addData(), clear(), y setDevice().

[noexcept] QXmlStreamReader::~QXmlStreamReader()

Destruye el lector.

void QXmlStreamReader::addData(QAnyStringView data)

Añade más data para que los lea el lector. Esta función no hace nada si el lector tiene un device().

Nota: En versiones de Qt anteriores a la 6.5, esta función estaba sobrecargada para QString y const char*.

Véase también readNext() y clear().

void QXmlStreamReader::addData(const QByteArray &data)

Añade más data para que los lea el lector. Esta función no hace nada si el lector tiene un device().

Se trata de una función sobrecargada.

Véase también readNext() y clear().

void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)

Añade un extraNamespaceDeclaration. La declaración será válida para los hijos del elemento actual o, si se llama a la función antes de leer ningún elemento, para todo el documento XML.

Véase también namespaceDeclarations(), addExtraNamespaceDeclarations() y setNamespaceProcessing().

void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)

Añade un vector de declaraciones especificado por extraNamespaceDeclarations.

Véase también namespaceDeclarations() y addExtraNamespaceDeclaration().

bool QXmlStreamReader::atEnd() const

Devuelve true si el lector ha leído hasta el final del documento XML, o si se ha producido un error error() y se ha interrumpido la lectura. En caso contrario, devuelve false.

Cuando atEnd() y hasError() devuelven true y error() devuelve PrematureEndOfDocumentError, significa que el XML se ha formado bien hasta el momento, pero no se ha analizado un documento XML completo. El siguiente trozo de XML puede añadirse con addData(), si el XML se está leyendo desde un QByteArray, o esperando a que lleguen más datos si el XML se está leyendo desde un QIODevice. En cualquier caso, atEnd() devolverá false cuando haya más datos disponibles.

Véase también hasError(), error(), device() y QIODevice::atEnd().

QXmlStreamAttributes QXmlStreamReader::attributes() const

Devuelve los atributos de un StartElement.

qint64 QXmlStreamReader::characterOffset() const

Devuelve el desplazamiento de caracteres actual, empezando por 0.

Véase también lineNumber() y columnNumber().

void QXmlStreamReader::clear()

Elimina cualquier device() o dato del lector y restablece su estado interno al estado inicial.

Véase también addData().

qint64 QXmlStreamReader::columnNumber() const

Devuelve el número de columna actual, empezando por 0.

Véase también lineNumber() y characterOffset().

QIODevice *QXmlStreamReader::device() const

Devuelve el dispositivo actual asociado a QXmlStreamReader, o nullptr si no se ha asignado ningún dispositivo.

Véase también setDevice().

QStringView QXmlStreamReader::documentEncoding() const

Si tokenType() es StartDocument, esta función devuelve la cadena de codificación especificada en la declaración XML. En caso contrario, devuelve una cadena vacía.

QStringView QXmlStreamReader::documentVersion() const

Si tokenType() es StartDocument, esta función devuelve la cadena de versión especificada en la declaración XML. En caso contrario, devuelve una cadena vacía.

QStringView QXmlStreamReader::dtdName() const

Si tokenType() es DTD, esta función devuelve el nombre del DTD. En caso contrario, devuelve una cadena vacía.

QStringView QXmlStreamReader::dtdPublicId() const

Si tokenType() es DTD, esta función devuelve el identificador público del DTD. En caso contrario, devuelve una cadena vacía.

QStringView QXmlStreamReader::dtdSystemId() const

Si tokenType() es DTD, esta función devuelve el identificador de sistema del DTD. En caso contrario, devuelve una cadena vacía.

QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const

Si tokenType() es DTD, esta función devuelve las declaraciones de entidad (externas) no analizadas de la DTD. En caso contrario, devuelve un vector vacío.

La clase QXmlStreamEntityDeclarations se define como QList de QXmlStreamEntityDeclaration.

int QXmlStreamReader::entityExpansionLimit() const

Devuelve la cantidad máxima de caracteres a los que puede expandirse una entidad. Si una sola entidad se expande más allá del límite dado, el documento no se considera bien formado.

Véase también setEntityExpansionLimit.

QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const

Devuelve el resolvedor de entidades, o nullptr si no hay resolvedor de entidades.

Véase también setEntityResolver().

QXmlStreamReader::Error QXmlStreamReader::error() const

Devuelve el tipo del error actual, o NoError si no se ha producido ningún error.

Véase también errorString() y raiseError().

QString QXmlStreamReader::errorString() const

Devuelve el mensaje de error que se estableció con raiseError().

Véase también error(), lineNumber(), columnNumber() y characterOffset().

bool QXmlStreamReader::hasError() const

Devuelve true si se ha producido un error, en caso contrario false.

Véase también errorString() y error().

[since 6.6] bool QXmlStreamReader::hasStandaloneDeclaration() const

Devuelve true si este documento tiene una declaración independiente explícita (puede ser "sí" o "no"); en caso contrario, devuelve false;

Si no se ha analizado ninguna declaración XML, esta función devuelve false.

Esta función se introdujo en Qt 6.6.

Véase también isStandaloneDocument().

bool QXmlStreamReader::isCDATA() const

Devuelve true si el lector informa de caracteres que proceden de una sección CDATA; en caso contrario devuelve false.

Véase también isCharacters() y text().

bool QXmlStreamReader::isCharacters() const

Devuelve true si tokenType() es igual a Characters; en caso contrario devuelve false.

Véase también isWhitespace() y isCDATA().

bool QXmlStreamReader::isComment() const

Devuelve true si tokenType() es igual a Comment; en caso contrario devuelve false.

bool QXmlStreamReader::isDTD() const

Devuelve true si tokenType() es igual a DTD; en caso contrario devuelve false.

bool QXmlStreamReader::isEndDocument() const

Devuelve true si tokenType() es igual a EndDocument; en caso contrario devuelve false.

bool QXmlStreamReader::isEndElement() const

Devuelve true si tokenType() es igual a EndElement; en caso contrario devuelve false.

bool QXmlStreamReader::isEntityReference() const

Devuelve true si tokenType() es igual a EntityReference; en caso contrario devuelve false.

bool QXmlStreamReader::isProcessingInstruction() const

Devuelve true si tokenType() es igual a ProcessingInstruction; en caso contrario devuelve false.

bool QXmlStreamReader::isStandaloneDocument() const

Devuelve true si este documento se ha declarado independiente en la declaración XML; en caso contrario, devuelve false.

Si no se ha analizado ninguna declaración XML, esta función devuelve false.

Véase también hasStandaloneDeclaration().

bool QXmlStreamReader::isStartDocument() const

Devuelve true si tokenType() es igual a StartDocument; en caso contrario devuelve false.

bool QXmlStreamReader::isStartElement() const

Devuelve true si tokenType() es igual a StartElement; en caso contrario devuelve false.

bool QXmlStreamReader::isWhitespace() const

Devuelve true si el lector informa de caracteres que sólo constan de espacios en blanco; en caso contrario, devuelve false.

Véase también isCharacters() y text().

qint64 QXmlStreamReader::lineNumber() const

Devuelve el número de línea actual, empezando por 1.

Véase también columnNumber() y characterOffset().

QStringView QXmlStreamReader::name() const

Devuelve el nombre local de un StartElement, EndElement, o un EntityReference.

Véase también namespaceUri() y qualifiedName().

QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const

Si tokenType() es StartElement, esta función devuelve las declaraciones de espacio de nombres del elemento. En caso contrario, devuelve un vector vacío.

La clase QXmlStreamNamespaceDeclarations se define como un QList de QXmlStreamNamespaceDeclaration.

Véase también addExtraNamespaceDeclaration() y addExtraNamespaceDeclarations().

QStringView QXmlStreamReader::namespaceUri() const

Devuelve el namespaceUri de un StartElement o EndElement.

Véase también name() y qualifiedName().

QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const

Si tokenType() es DTD, esta función devuelve las declaraciones de notación de la DTD. En caso contrario, devuelve un vector vacío.

La clase QXmlStreamNotationDeclarations se define como una QList de QXmlStreamNotationDeclaration.

QStringView QXmlStreamReader::prefix() const

Devuelve el prefijo de un StartElement o EndElement.

Véase también name() y qualifiedName().

QStringView QXmlStreamReader::processingInstructionData() const

Devuelve los datos de un ProcessingInstruction.

QStringView QXmlStreamReader::processingInstructionTarget() const

Devuelve el destino de un ProcessingInstruction.

QStringView QXmlStreamReader::qualifiedName() const

Devuelve el nombre cualificado de un StartElement o EndElement;

Un nombre cualificado es el nombre en bruto de un elemento en los datos XML. Consiste en el prefijo del espacio de nombres, seguido de dos puntos, seguido del nombre local del elemento. Dado que el prefijo del espacio de nombres no es único (el mismo prefijo puede apuntar a diferentes espacios de nombres y diferentes prefijos pueden apuntar al mismo espacio de nombres), no debería utilizar qualifiedName(), sino el namespaceUri() resuelto y el name() local del atributo.

Véase también name(), prefix() y namespaceUri().

void QXmlStreamReader::raiseError(const QString &message = QString())

Genera un error personalizado con un error opcional message.

Véase también error() y errorString().

QString QXmlStreamReader::readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement)

Función de conveniencia que se llama en caso de que se haya leído un StartElement. Lee hasta el correspondiente EndElement y devuelve todo el texto intermedio. En caso de que no se produzca ningún error, el token actual (véase tokenType()) después de haber llamado a esta función es EndElement.

La función concatena text() cuando lee los tokens Characters o EntityReference, pero se salta ProcessingInstruction y Comment. Si el token actual no es StartElement, se devuelve una cadena vacía.

behaviour define lo que ocurre en caso de que se lea cualquier otra cosa antes de llegar a EndElement. La función puede incluir el texto de los elementos hijos (útil, por ejemplo, para HTML), ignorar los elementos hijos, o lanzar un UnexpectedElementError y devolver lo que se ha leído hasta el momento (por defecto).

QXmlStreamReader::TokenType QXmlStreamReader::readNext()

Lee el siguiente token y devuelve su tipo.

Con una excepción, una vez que readNext() informa de un error(), no es posible seguir leyendo el flujo XML. Entonces atEnd() devuelve true, hasError() devuelve true, y esta función devuelve QXmlStreamReader::Invalid.

La excepción es cuando error() devuelve PrematureEndOfDocumentError. Este error se produce cuando se alcanza el final de un trozo de XML que, por lo demás, está bien formado, pero el trozo no representa un documento XML completo. En ese caso, el análisis se puede reanudar llamando a addData() para añadir el siguiente trozo de XML, cuando el flujo se está leyendo desde QByteArray, o esperando a que lleguen más datos cuando el flujo se está leyendo desde device().

Véase también tokenType() y tokenString().

bool QXmlStreamReader::readNextStartElement()

Lee hasta el siguiente elemento de inicio dentro del elemento actual. Devuelve true cuando se ha alcanzado un elemento de inicio. Cuando se ha alcanzado el elemento final, o cuando se ha producido un error, se devuelve false.

El elemento actual es el elemento que coincide con el elemento inicial analizado más recientemente y del que aún no se ha alcanzado un elemento final coincidente. Cuando el analizador sintáctico ha alcanzado el elemento final, el elemento actual se convierte en el elemento padre.

Se trata de una función muy útil cuando sólo se desea analizar elementos XML. El ejemplo de marcadores QXmlStream hace un uso extensivo de esta función.

Véase también readNext().

[since 6.10] QString QXmlStreamReader::readRawInnerData()

Lee y devuelve el contenido XML interno sin procesar del elemento actual. Esta función es útil para recuperar el contenido completo incrustado dentro de un elemento, incluyendo etiquetas anidadas, texto, comentarios, instrucciones de procesamiento, secciones CDATA y otras marcas - preservando la estructura XML original.

El elemento actual es el elemento que coincide con el elemento inicial analizado más recientemente y del que aún no se ha alcanzado un elemento final coincidente. Cuando el analizador sintáctico ha alcanzado el elemento final, el elemento actual se convierte en el elemento padre.

Nota: las referencias a entidades definidas en la DTD se resuelven durante el análisis sintáctico y se devuelven como texto sin formato, ya que las declaraciones DTD se procesan por separado y no forman parte del contenido del elemento. Sólo las cinco entidades XML predefinidas (&lt;, &gt;, &amp;, &apos;, &quot;) se vuelven a escapar en la salida.

Esta función se introdujo en Qt 6.10.

void QXmlStreamReader::setDevice(QIODevice *device)

Establece el dispositivo actual en device. Al establecer el dispositivo se restablece el flujo a su estado inicial.

Véase también device() y clear().

void QXmlStreamReader::setEntityExpansionLimit(int limit)

Establece la cantidad máxima de caracteres en los que se puede expandir una sola entidad en limit. Si una sola entidad se expande más allá del límite dado, el documento no se considera bien formado.

El límite está ahí para prevenir ataques DoS cuando se cargan documentos XML desconocidos en los que la expansión recursiva de entidades podría agotar toda la memoria disponible.

El valor por defecto de esta propiedad es de 4096 caracteres.

Véase también entityExpansionLimit.

void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)

Hace de resolver el nuevo entityResolver().

El lector de flujo no se apropia del resolver. Es responsabilidad de quien llama asegurarse de que el resolver es válido durante todo el tiempo de vida del objeto lector de flujo, o hasta que se establezca otro resolver o nullptr.

Véase también entityResolver().

void QXmlStreamReader::skipCurrentElement()

Lee hasta el final del elemento actual, saltándose cualquier nodo hijo. Esta función es útil para saltar elementos desconocidos.

El elemento actual es el elemento que coincide con el elemento inicial analizado más recientemente y del que aún no se ha alcanzado un elemento final coincidente. Cuando el analizador sintáctico ha alcanzado el elemento final, el elemento actual se convierte en el elemento padre.

QStringView QXmlStreamReader::text() const

Devuelve el texto de Characters, Comment, DTD, o EntityReference.

QString QXmlStreamReader::tokenString() const

Devuelve el token actual del lector como cadena.

Véase también tokenType().

QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const

Devuelve el tipo del token actual.

El token actual también puede consultarse con las funciones de conveniencia isStartDocument(), isEndDocument(), isStartElement(), isEndElement(), isCharacters(), isComment(), isDTD(), isEntityReference() y isProcessingInstruction().

Véase también 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.