QXmlStreamReader Class
QXmlStreamReader 类提供了一个快速的解析器,可通过简单的流式 API 读取结构正确的 XML 1.0 文档。更多内容...
| 标题: | #include <QXmlStreamReader> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 所有成员列表,包括继承的成员
- QXmlStreamReader 属于XML 类。
注意:该类中的所有函数均为可重入的。
公共类型
| enum | Error { NoError, CustomError, NotWellFormedError, PrematureEndOfDocumentError, UnexpectedElementError } |
| enum | ReadElementTextBehaviour { ErrorOnUnexpectedElement, IncludeChildElements, SkipChildElements } |
| enum | TokenType { NoToken, Invalid, StartDocument, EndDocument, StartElement, …, ProcessingInstruction } |
属性
- namespaceProcessing : bool
公共函数
| 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 |
详细说明
QXmlStreamReader 提供了一个简单的流式 API,用于解析格式正确的 XML 1.0 文档。它是一种替代方案,无需先将完整的 XML 加载到 DOM 树中(参见QDomDocument )。QXmlStreamReader 可以从QIODevice (参见setDevice())或原始的QByteArray (参见addData())中读取数据。
注意:QXmlStreamReader 仅支持 XML 1.0 版本。声明为其他版本(例如“1.1”)的文档将导致解析错误。
Qt 提供了QXmlStreamWriter 用于编写 XML。
流读取器的基本概念是将 XML 文档作为令牌流进行报告,这与 SAX 类似。QXmlStreamReader 与 SAX 之间的主要区别在于这些 XML 令牌的报告方式。 在 SAX 中,应用程序必须提供处理程序(回调函数),这些处理程序会在解析器认为合适的时候接收来自解析器的所谓 XML事件。而在 QXmlStreamReader 中,应用程序代码本身驱动循环,并根据需要从读取器中依次提取标记。 这通过调用readNext()来实现,此时读取器会从输入流中读取数据,直到完成下一个标记的解析,此时它会返回tokenType()。随后可以使用一组便捷函数(包括isStartElement()和text())来检查该标记,从而获取已读取内容的相关信息。 这种“拉取”方式的最大优势在于可以用来构建递归下降解析器,这意味着您可以轻松地将 XML 解析代码拆分为不同的方法或类。这使得在解析 XML 时,更容易跟踪应用程序自身的状态。
使用 QXmlStreamReader 的典型循环如下所示:
QXmlStreamReader xml;
//...
while (!xml.atEnd()) {
xml.readNext();
//... do processing
}
if (xml.hasError()) {
//... do error handling
}QXmlStreamReader 是一个针对结构良好的文档、不进行验证且仅支持前向读取的 XML 1.0 解析器。它不处理外部已解析实体,也不执行 DTD 验证。只要未发生错误,应用程序即可依赖以下保证:
- XML 内容符合 W3C 对结构良好的 XML 1.0 的标准
- 对内部实体的引用已被正确的替换文本所替换。
- 属性已根据DTD 内部子集进行规范化或添加。
- 令牌按结构良好的文档的正确顺序提供。
- StartDocument 标记(若存在)位于除注释和处理指令之外的所有其他元素之前。
- 最多只能出现一个 DOCTYPE 元素(类型为DTD 的令牌),如果存在,则它应出现在任何其他内容(除StartDocument 、注释和处理指令外)之前。
特别是,一旦出现任何类型为StartElement 、EndElement 、Characters 、EntityReference 或EndDocument 的标记,就不会再出现类型为StartDocument 或 DTD 的标记。如果输入流中出现了一个顺序错误的标记,则会引发错误。
注意: 标记类型Comment 和ProcessingInstruction 可能出现在流中的任何位置。
如果解析过程中发生错误,atEnd() 和hasError() 将返回 true,而error() 将返回发生的错误。函数errorString()、lineNumber()、columnNumber() 和characterOffset() 用于构建相应的错误或警告消息。 为了简化应用程序代码,QXmlStreamReader 包含一个raiseError() 机制,允许您抛出自定义错误,从而触发上述所述的相同错误处理流程。
QXmlStream 书签示例演示了如何使用递归下降技术,通过流读取器读取 XML 书签文件 (XBEL)。
命名空间
QXmlStream 能够识别并解析 XML 命名空间。 例如,对于StartElement ,namespaceUri()将返回该元素所属的命名空间,而name()将返回该元素的本地名称。namespaceUri 和name的组合可唯一标识一个元素。如果阅读器解析的XML实体中未声明命名空间前缀,则namespaceUri 为空。
如果解析的 XML 数据未按照 XML 规范使用命名空间,或者根本未使用命名空间,则可以使用元素的qualifiedName() 方法代替。 限定名是指元素的prefix() 后跟冒号,再后跟元素的本地name()——这与元素在原始 XML 数据中的出现方式完全一致。由于namespaceUri 与前缀之间的映射既非唯一也非通用,因此对于符合命名空间规范的 XML 数据,应避免使用qualifiedName()。
为了解析确实使用了未声明命名空间前缀的独立文档,您可以通过namespaceProcessing 属性完全禁用命名空间处理。
增量解析
QXmlStreamReader 是一个增量解析器。它可以处理文档因分块到达(例如来自多个文件或通过网络连接)而无法一次性解析的情况。 当读取器在文档完全解析完毕前用尽数据时,它会报告一个PrematureEndOfDocumentError 。当有更多数据到达时——无论是由于调用了addData(),还是通过网络device()获取了更多数据——读取器都会从PrematureEndOfDocumentError 错误中恢复,并通过下一次调用readNext()继续解析新数据。
例如,如果您的应用程序使用network access manager 从网络读取数据,您将向管理器发出network request 请求,并收到network reply 作为响应。 由于QNetworkReply 是QIODevice ,因此需将其readyRead()信号连接到自定义槽中,例如在QNetworkAccessManager 讨论中展示的代码片段中的slotReadyRead() 。在此槽中,您使用readAll()读取所有可用数据,并通过addData()将其传递给XML流读取器。随后,调用自定义解析函数从读取器中读取XML事件。
性能与内存消耗
QXmlStreamReader 在设计上非常节省内存,因为它不会将整个 XML 文档树存储在内存中,而仅在报告时存储当前的标记。 此外,QXmlStreamReader 避免了通常将 XML 文档映射到便捷且符合 Qt 风格的 API 时所需的众多小型字符串分配。它通过将所有字符串数据报告为QStringView (而非真正的QString 对象)来实现这一点。对其中任何一个对象调用toString() 都会返回一个等效的真实QString 对象。
成员类型文档
enum QXmlStreamReader::Error
此枚举指定了不同的错误情况
| 常量 | 值 | 描述 |
|---|---|---|
QXmlStreamReader::NoError | 0 | 未发生错误。 |
QXmlStreamReader::CustomError | 2 | 已通过 `raiseError()` 引发了一个自定义错误 |
QXmlStreamReader::NotWellFormedError | 3 | 由于读取的 XML 格式不正确,解析器在内部引发了一个错误。 |
QXmlStreamReader::PrematureEndOfDocumentError | 4 | 在解析出结构正确的 XML 文档之前,输入流已结束。如果流中还有更多的 XML 数据,则可以通过调用 `addData()` 或等待数据到达 `device()` 来从该错误中恢复。 |
QXmlStreamReader::UnexpectedElementError | 1 | 解析器遇到一个与预期不符的元素或标记。 |
enum QXmlStreamReader::ReadElementTextBehaviour
此枚举指定了readElementText() 的不同行为。
| 常量 | 常量值 | 描述 |
|---|---|---|
QXmlStreamReader::ErrorOnUnexpectedElement | 0 | 当遇到子元素时,触发UnexpectedElementError 并返回迄今为止读取的内容。 |
QXmlStreamReader::IncludeChildElements | 1 | 递归地包含子元素中的文本。 |
QXmlStreamReader::SkipChildElements | 2 | 跳过子元素。 |
enum QXmlStreamReader::TokenType
此枚举指定了读取器刚刚读取的令牌类型。
| 常量 | 值 | 描述 |
|---|---|---|
QXmlStreamReader::NoToken | 0 | 读取器尚未读取任何内容。 |
QXmlStreamReader::Invalid | 1 | 发生错误,在error() 和errorString() 中进行了报告。 |
QXmlStreamReader::StartDocument | 2 | 读取器在documentVersion() 中报告 XML 版本号,并在documentEncoding() 中报告 XML 文档中指定的编码。如果文档被声明为独立文档,则isStandaloneDocument() 返回true ;否则,它返回false 。 |
QXmlStreamReader::EndDocument | 3 | 读取器报告文档的结束。 |
QXmlStreamReader::StartElement | 4 | 读取器通过namespaceUri() 和name() 报告元素的开始。空元素也会作为 StartElement 报告,其后直接跟 EndElement。可以调用便捷函数readElementText() 来拼接所有内容直至对应的 EndElement。属性在attributes() 中报告,命名空间声明在namespaceDeclarations() 中报告。 |
QXmlStreamReader::EndElement | 5 | 读取器通过namespaceUri() 和name() 报告元素的结束。 |
QXmlStreamReader::Characters | 6 | 读取器通过text() 报告字符。如果字符均为空白符,则isWhitespace() 返回true 。如果字符源自 CDATA 段,则isCDATA() 返回true 。 |
QXmlStreamReader::Comment | 7 | 解析器在text() 中报告了一个注释。 |
QXmlStreamReader::DTD | 8 | 解析器在text() 中报告了一个 DTD,在notationDeclarations() 中报告了符号声明,并在entityDeclarations() 中报告了实体声明。DTD 声明的详细信息分别报告在dtdName()、dtdPublicId() 和dtdSystemId() 中。 |
QXmlStreamReader::EntityReference | 9 | 阅读器报告了一个无法解析的实体引用。该引用的名称详见name(),替换文本详见text()。 |
QXmlStreamReader::ProcessingInstruction | 10 | 阅读器在processingInstructionTarget() 和processingInstructionData() 中报告了一个处理指令。 |
属性文档
namespaceProcessing : bool
该属性存储流读取器的命名空间处理标志。
该属性控制流读取器是否处理命名空间。如果启用,读取器将处理命名空间;否则,则不处理。
默认情况下,命名空间处理功能处于启用状态。
访问函数:
| bool | namespaceProcessing() const |
| void | setNamespaceProcessing(bool) |
成员函数文档
QXmlStreamReader::QXmlStreamReader()
构建一个流读取器。
[explicit] QXmlStreamReader::QXmlStreamReader(QAnyStringView data)
创建一个新的流读取器,用于从data 读取数据。
注意:在 Qt 6.5 之前的版本中,此构造函数针对QString 和const char* 进行了重载。
另请参阅 addData()、clear() 和setDevice()。
[explicit] QXmlStreamReader::QXmlStreamReader(QIODevice *device)
创建一个新的流读取器,用于从device 读取数据。
[explicit] QXmlStreamReader::QXmlStreamReader(const QByteArray &data)
创建一个新的流读取器,用于从data 读取数据。
这是一个重载函数。
另请参阅 addData()、clear() 和setDevice()。
[noexcept] QXmlStreamReader::~QXmlStreamReader()
摧毁了读者。
void QXmlStreamReader::addData(QAnyStringView data)
为阅读器添加更多data 内容供其读取。如果阅读器已调用device(),则此函数不执行任何操作。
注意:在 Qt 6.5 之前的版本中,该函数针对QString 和const char* 进行了重载。
void QXmlStreamReader::addData(const QByteArray &data)
为阅读器添加更多data 供其读取。如果阅读器已调用device(),则此函数不执行任何操作。
这是一个重载函数。
void QXmlStreamReader::addExtraNamespaceDeclaration(const QXmlStreamNamespaceDeclaration &extraNamespaceDeclaration)
添加一个extraNamespaceDeclaration 。该声明对当前元素的子元素有效;或者——如果在读取任何元素之前调用该函数——则对整个XML文档有效。
另请参阅 namespaceDeclarations()、addExtraNamespaceDeclarations() 和setNamespaceProcessing()。
void QXmlStreamReader::addExtraNamespaceDeclarations(const QXmlStreamNamespaceDeclarations &extraNamespaceDeclarations)
添加由extraNamespaceDeclarations 指定的声明向量。
另请参阅 namespaceDeclarations() 和addExtraNamespaceDeclaration()。
bool QXmlStreamReader::atEnd() const
如果读取器已读取到XML文档末尾,或者发生了error()并导致读取被中止,则返回true 。否则,返回false 。
当 atEnd() 和hasError() 返回 true,且error() 返回PrematureEndOfDocumentError 时,表示到目前为止 XML 格式正确,但尚未解析出完整的 XML 文档。 如果 XML 数据是从QByteArray 读取的,则可使用addData() 添加下一段 XML;如果 XML 数据是从QIODevice 读取的,则需等待更多数据到达。无论哪种情况,一旦有更多数据可用,atEnd() 都会返回 false。
另请参阅 hasError()、error()、device() 以及QIODevice::atEnd()。
QXmlStreamAttributes QXmlStreamReader::attributes() const
返回StartElement 的属性。
qint64 QXmlStreamReader::characterOffset() const
返回当前字符偏移量,从 0 开始计数。
另请参见 lineNumber() 和columnNumber()。
void QXmlStreamReader::clear()
从读取器中移除所有device()或数据,并将读取器的内部状态重置为初始状态。
另请参阅 addData()。
qint64 QXmlStreamReader::columnNumber() const
返回当前列号,从 0 开始计数。
另请参阅 lineNumber() 和characterOffset()。
QIODevice *QXmlStreamReader::device() const
返回与QXmlStreamReader 关联的当前设备;如果尚未分配任何设备,则返回nullptr 。
另请参阅 setDevice()。
QStringView QXmlStreamReader::documentEncoding() const
如果 `tokenType()` 的值为 `StartDocument`,则该函数返回 XML 声明中指定的编码字符串。否则,返回一个空字符串。
QStringView QXmlStreamReader::documentVersion() const
如果 `tokenType()` 的值为 `StartDocument`,则该函数返回 XML 声明中指定的版本字符串。否则,返回一个空字符串。
QStringView QXmlStreamReader::dtdName() const
如果 `tokenType()` 的值为 `DTD`,则该函数返回 DTD 的名称。否则,返回一个空字符串。
QStringView QXmlStreamReader::dtdPublicId() const
如果 `tokenType()` 的值为 `DTD`,则该函数返回 DTD 的公共标识符。否则,返回一个空字符串。
QStringView QXmlStreamReader::dtdSystemId() const
如果 `tokenType()` 的值为 `DTD`,则该函数返回 DTD 的系统标识符。否则,返回空字符串。
QXmlStreamEntityDeclarations QXmlStreamReader::entityDeclarations() const
如果 `tokenType()` 的值为 `DTD`,则该函数返回 DTD 的未解析(外部)实体声明。否则,返回一个空向量。
QXmlStreamEntityDeclarations 类被定义为QXmlStreamEntityDeclaration 的QList 。
int QXmlStreamReader::entityExpansionLimit() const
返回单个实体允许展开的最大字符数。如果单个实体的展开长度超过了给定的限制,则该文档将被视为格式不正确。
另请参阅 setEntityExpansionLimit 。
QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const
返回实体解析器;如果不存在实体解析器,则返回nullptr 。
另请参阅 setEntityResolver()。
QXmlStreamReader::Error QXmlStreamReader::error() const
返回当前错误的类型;若未发生错误,则返回NoError 。
另请参阅 errorString() 和raiseError()。
QString QXmlStreamReader::errorString() const
返回通过raiseError() 设置的错误信息。
另请参阅 error()、lineNumber()、columnNumber() 以及characterOffset()。
bool QXmlStreamReader::hasError() const
如果发生错误,则返回true ;否则返回false 。
另请参阅 errorString() 和error()。
[since 6.6] bool QXmlStreamReader::hasStandaloneDeclaration() const
如果该文档包含显式的独立文档声明(可以是“yes”或“no”),则返回true ;否则返回false ;
如果未解析任何 XML 声明,则该函数返回false 。
该函数在 Qt 6.6 中引入。
另请参阅 isStandaloneDocument()。
bool QXmlStreamReader::isCDATA() const
如果读取器报告的字符源自 CDATA 段,则返回true ;否则返回false 。
另请参阅 isCharacters() 和text()。
bool QXmlStreamReader::isCharacters() const
如果tokenType() 等于Characters ,则返回true ;否则返回false 。
另请参阅 isWhitespace() 和isCDATA()。
bool QXmlStreamReader::isComment() const
如果tokenType() 等于Comment ,则返回true ;否则返回false 。
bool QXmlStreamReader::isDTD() const
如果tokenType() 等于DTD ,则返回true ;否则返回false 。
bool QXmlStreamReader::isEndDocument() const
如果tokenType()等于EndDocument ,则返回true ;否则返回false 。
bool QXmlStreamReader::isEndElement() const
如果tokenType() 等于EndElement ,则返回true ;否则返回false 。
bool QXmlStreamReader::isEntityReference() const
如果tokenType() 等于EntityReference ,则返回true ;否则返回false 。
bool QXmlStreamReader::isProcessingInstruction() const
如果tokenType() 等于ProcessingInstruction ,则返回true ;否则返回false 。
bool QXmlStreamReader::isStandaloneDocument() const
如果该文档在 XML 声明中被声明为独立文档,则返回 `true `;否则返回 `false`。
如果未解析任何 XML 声明,则该函数返回 `false`。
另请参阅 hasStandaloneDeclaration()。
bool QXmlStreamReader::isStartDocument() const
如果tokenType()等于StartDocument ,则返回true ;否则返回false 。
bool QXmlStreamReader::isStartElement() const
如果 `tokenType()` 等于 `StartElement`,则返回 `true `;否则返回 `false`。
bool QXmlStreamReader::isWhitespace() const
如果读取器报告的字符仅由空白字符组成,则返回 `true `;否则返回 `false`。
另请参见 isCharacters() 和text()。
qint64 QXmlStreamReader::lineNumber() const
返回当前行号,从 1 开始计数。
另请参阅 columnNumber() 和characterOffset()。
QStringView QXmlStreamReader::name() const
返回StartElement 、EndElement 或EntityReference 的本地名称。
另请参阅 namespaceUri() 和qualifiedName()。
QXmlStreamNamespaceDeclarations QXmlStreamReader::namespaceDeclarations() const
如果 `tokenType()` 的返回值为 `StartElement`,则该函数返回该元素的命名空间声明;否则返回一个空向量。
QXmlStreamNamespaceDeclarations 类被定义为QXmlStreamNamespaceDeclaration 的QList 。
另请参阅 addExtraNamespaceDeclaration() 和addExtraNamespaceDeclarations()。
QStringView QXmlStreamReader::namespaceUri() const
返回StartElement 或EndElement 的namespaceUri。
另请参阅 name() 和qualifiedName()。
QXmlStreamNotationDeclarations QXmlStreamReader::notationDeclarations() const
如果 `tokenType()` 的值为 `DTD`,则该函数返回 DTD 的标记声明;否则返回一个空向量。
QXmlStreamNotationDeclarations 类被定义为QXmlStreamNotationDeclaration 的QList 。
QStringView QXmlStreamReader::prefix() const
返回StartElement 或EndElement 的前缀。
另请参阅 name() 和qualifiedName()。
QStringView QXmlStreamReader::processingInstructionData() const
返回ProcessingInstruction 的数据。
QStringView QXmlStreamReader::processingInstructionTarget() const
返回ProcessingInstruction 的对象。
QStringView QXmlStreamReader::qualifiedName() const
返回StartElement 或EndElement 的限定名称;
限定名称是 XML 数据中某个元素的原始名称。它由命名空间前缀、冒号以及元素的本地名称组成。 由于命名空间前缀并非唯一(相同的前缀可能指向不同的命名空间,不同的前缀也可能指向同一个命名空间),因此不应使用 qualifiedName(),而应使用已解析的namespaceUri() 以及属性的本地name()。
另请参阅 name()、prefix() 和namespaceUri()。
void QXmlStreamReader::raiseError(const QString &message = QString())
抛出一个自定义错误,并可选地包含错误message 。
另请参阅 error() 和errorString()。
QString QXmlStreamReader::readElementText(QXmlStreamReader::ReadElementTextBehaviour behaviour = ErrorOnUnexpectedElement)
当读取到StartElement 时调用的便捷函数。该函数会持续读取直到遇到相应的EndElement ,并返回两者之间的所有文本。若无错误,调用此函数后,当前令牌(参见tokenType())为EndElement 。
当读取到Characters 或EntityReference 令牌时,该函数会将text() 拼接进去,但会跳过ProcessingInstruction 和Comment 。如果当前令牌不是StartElement ,则返回空字符串。
behaviour 定义了在读取到EndElement 之前若读取到其他内容时应如何处理。该函数可以包含子元素的文本(例如对 HTML 很有用)、忽略子元素,或者抛出UnexpectedElementError 异常并返回迄今为止读取的内容(默认行为)。
QXmlStreamReader::TokenType QXmlStreamReader::readNext()
读取下一个标记并返回其类型。
除一种情况外,一旦 readNext() 报告了error(),就无法继续读取 XML 流。此时,atEnd() 将返回true ,hasError() 将返回true ,而本函数将返回QXmlStreamReader::Invalid 。
例外情况是当error()返回PrematureEndOfDocumentError 时。当达到一个本应格式正确的XML片段的末尾,但该片段并不代表完整的XML文档时,会报告此错误。 在这种情况下,如果流是从 `QByteArray` 读取的,可以通过调用 `addData()` 来添加下一个 XML 片段,从而恢复解析;如果流是从 `device()` 读取的,则可以通过等待更多数据到达来恢复解析。
另请参阅 tokenType() 和tokenString()。
bool QXmlStreamReader::readNextStartElement()
读取至当前元素内的下一个起始元素。当遇到起始元素时,返回true 。当遇到结束元素或发生错误时,返回false。
当前元素是指与最近解析的起始元素匹配、且其对应的结束元素尚未被解析到的元素。当解析器到达结束元素时,当前元素将变为父元素。
这是一个便捷函数,适用于您仅关注解析 XML 元素的情况。QXmlStream 书签示例中广泛使用了此函数。
另请参阅 readNext()。
[since 6.10] QString QXmlStreamReader::readRawInnerData()
读取并返回当前元素的原始内部 XML 内容。此函数可用于检索嵌入在元素内的完整内容,包括嵌套标签、文本、注释、处理指令、CDATA 段及其他标记——同时保留原始的 XML 结构。
当前元素是指与最近解析的起始元素匹配,且尚未遇到匹配结束元素的那个元素。当解析器到达结束元素时,当前元素将变为父元素。
注意: 在 DTD 中定义的实体 引用会在解析过程中被解析,并作为纯文本返回,因为 DTD 声明是单独处理的,不属于元素内容的一部分。只有五个预定义的 XML 实体(< 、> 、& 、' 、" )会在输出中重新转义。
该函数首次出现在 Qt 6.10 中。
void QXmlStreamReader::setDevice(QIODevice *device)
将当前设备设置为device 。设置该设备会将流重置为初始状态。
void QXmlStreamReader::setEntityExpansionLimit(int limit)
将单个实体允许展开的最大字符数设置为limit 。如果单个实体展开后的长度超过了给定的限制,则该文档将被视为格式不正确。
设置此限制是为了防止在加载未知 XML 文档时发生拒绝服务(DoS)攻击,否则递归实体展开可能会耗尽所有可用内存。
此属性的默认值为 4096 个字符。
最小值为 1,以支持内置的 XML 实体(< 等)。
另请参阅 entityExpansionLimit 。
void QXmlStreamReader::setEntityResolver(QXmlStreamEntityResolver *resolver)
将resolver 转换为新的entityResolver()。
流读取器不会接管解析器的所有权。调用方有责任确保在流读取器对象的整个生命周期内,或者直到设置了另一个解析器或nullptr 之前,该解析器始终有效。
另请参阅 entityResolver()。
void QXmlStreamReader::skipCurrentElement()
读取至当前元素的末尾,跳过所有子节点。此函数可用于跳过未知元素。
当前元素是指与最近解析的起始元素匹配,且尚未遇到与其匹配的结束元素的元素。当解析器到达结束元素时,当前元素将变为父元素。
QStringView QXmlStreamReader::text() const
返回Characters 、Comment 、DTD 或EntityReference 中的文本。
QString QXmlStreamReader::tokenString() const
返回读取器当前的标记,格式为字符串。
另请参阅 tokenType()。
QXmlStreamReader::TokenType QXmlStreamReader::tokenType() const
返回当前令牌的类型。
还可以通过以下便捷函数查询当前令牌:isStartDocument()、isEndDocument()、isStartElement()、isEndElement()、isCharacters()、isComment()、isDTD()、isEntityReference() 以及isProcessingInstruction()。
另请参阅 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.