XML 流处理
Qt 提供了两个类,用于通过简单的流式 API 读写 XML:QXmlStreamReader 和QXmlStreamWriter 。这些类位于Qt 序列化模块(QtCore 的一部分)中。
流读取器将 XML 文档作为令牌流进行报告。这与 SAX 不同,因为 SAX 应用程序提供处理程序来接收来自解析器的 XML 事件,而QXmlStreamReader 则驱动循环,在需要时从读取器中提取令牌。 这种“拉取”方式使得构建递归下降解析器成为可能,从而允许将 XML 解析代码拆分为不同的方法或类。
QXmlStreamReader 是一个排除外部解析实体的、符合 XML 1.0 规范的解析器。因此,只要没有发生错误,流读取器提供的数据就符合 W3C 对符合规范的 XML 的标准。否则,可以使用atEnd()、error() 和hasError() 等函数来检查和查看错误。
一个使用QXmlStreamReader 的实现示例是QXmlStream 书签示例中的 XbelReader,它封装了一个QXmlStreamReader 。阅读该实现可进一步了解如何使用QXmlStreamReader 类。
与QXmlStreamReader 配对使用的是QXmlStreamWriter 类,它为XML写入器提供了一个简单的流式API。QXmlStreamWriter 基于QIODevice 进行操作,并针对您想要写入的所有XML标记或事件提供了专用函数,例如writeDTD()、writeCharacters()、writeComment()等。
若要使用QXmlStreamWriter 写入 XML 文档,需先通过writeStartDocument() 函数开启文档,并以writeEndDocument() 结束文档,该操作会隐式关闭所有剩余的未闭合标签。元素标签通过writeStartDocument() 打开,随后依次为writeAttribute() 或writeAttributes()、元素内容,最后以writeEndDocument() 结束。此外,writeEmptyElement() 可用于写入空元素。
元素内容由字符、实体引用或嵌套元素组成。内容可通过writeCharacters() 写入——该函数还会自动对所有禁止的字符和字符序列进行转义——也可通过writeEntityReference() 写入,或者通过后续多次调用writeStartElement() 写入。
来自QXmlStream 书签示例中的 XbelWriter类封装了一个QXmlStreamWriter 。请查看其实现以了解如何使用QXmlStreamWriter 类。
© 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.