XML 流

Qt 提供了两个通过简单流 API 读写 XML 的类:QXmlStreamReaderQXmlStreamWriter 。这些类位于Qt Serialization(QtCore 的一部分)中。

流阅读器以标记流的形式报告 XML 文档。这与 SAX 不同,SAX 应用程序提供处理程序来接收来自解析器的 XML 事件,而QXmlStreamReader 则驱动循环,在需要时从阅读器中提取标记。这种提取方法使得建立递归下降解析器成为可能,从而允许将 XML 解析代码拆分成不同的方法或类。

QXmlStreamReader 流式阅读器是一种格式良好的 XML 1.0 解析器,不包括外部解析实体。因此,只要不发生错误,流阅读器提供的数据就符合 W3C 的 XML 格式化标准。否则,可以使用 (), () 和 () 等函数来检查和查看错误。atEnd error hasError

使用QXmlStreamReader 实现的一个例子是QXmlStream Bookmarks Example 中的XbelReader,它封装了一个QXmlStreamReader 。阅读该实现可了解如何使用QXmlStreamReader 类。

QXmlStreamReader 搭配使用的是QXmlStreamWriter 类,它为 XML 写入器提供了一个简单的流 API。QXmlStreamWriterQIODevice 进行操作,并为您要写入的所有 XML 标记或事件提供专门的函数,如writeDTD(),writeCharacters(),writeComment() 等。

要使用QXmlStreamWriter 编写 XML 文档,可以使用writeStartDocument() 函数开始文档,并使用writeEndDocument() 结束文档,该函数会隐式关闭所有剩余的打开标记。元素标记用writeStartDocument() 打开,然后是writeAttribute() 或writeAttributes()、元素内容,最后是writeEndDocument()。此外,writeEmptyElement() 也可用于写入空元素。

元素内容包括字符、实体引用或嵌套元素。内容可以用writeCharacters() 写入,该函数还负责转义所有禁止使用的字符和字符序列、writeEntityReference() 或对writeStartElement() 的后续调用。

QXmlStream Bookmarks Example中的XbelWriter类封装了一个QXmlStreamWriter 。请查看该实现,了解如何使用QXmlStreamWriter 类。

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