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 |
- Lista de todos los miembros, incluidos los heredados
- QXmlStreamReader es parte de XML Classes.
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
- namespaceProcessing : bool
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
| Constante | Valor | Descripción |
|---|---|---|
QXmlStreamReader::NoError | 0 | No se ha producido ningún error. |
QXmlStreamReader::CustomError | 2 | Se ha producido un error personalizado con raiseError() |
QXmlStreamReader::NotWellFormedError | 3 | El analizador ha generado internamente un error debido a que el XML leído no estaba bien formado. |
QXmlStreamReader::PrematureEndOfDocumentError | 4 | El 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::UnexpectedElementError | 1 | El analizador ha encontrado un elemento o token diferente de los esperados. |
enum QXmlStreamReader::ReadElementTextBehaviour
Este enum especifica los diferentes comportamientos de readElementText().
| Constante | Valor | Descripción |
|---|---|---|
QXmlStreamReader::ErrorOnUnexpectedElement | 0 | Lanza un UnexpectedElementError y devuelve lo leído hasta el momento cuando se encuentra un elemento hijo. |
QXmlStreamReader::IncludeChildElements | 1 | Incluir recursivamente el texto de los elementos hijos. |
QXmlStreamReader::SkipChildElements | 2 | Omitir elementos hijos. |
enum QXmlStreamReader::TokenType
Este enum especifica el tipo de ficha que el lector acaba de leer.
| Constante | Valor | Descripción |
|---|---|---|
QXmlStreamReader::NoToken | 0 | El lector aún no ha leído nada. |
QXmlStreamReader::Invalid | 1 | Se ha producido un error, del que se informa en error() y errorString(). |
QXmlStreamReader::StartDocument | 2 | El 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::EndDocument | 3 | El lector informa del final del documento. |
QXmlStreamReader::StartElement | 4 | El 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::EndElement | 5 | El lector informa del final de un elemento con namespaceUri() y name(). |
QXmlStreamReader::Characters | 6 | El 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::Comment | 7 | El lector informa de un comentario en text(). |
QXmlStreamReader::DTD | 8 | El 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::EntityReference | 9 | El 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::ProcessingInstruction | 10 | El 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 (<, >, &, ', ") 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.