XML流式传输

Qt提供两个类通过简单的流式API读取和写入XML: QXmlStreamReaderQXmlStreamWriter。这些类位于 Qt序列化(属于QtCore的一部分)

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

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

一个使用 QXmlStreamReader 的实现示例是 XbelReader,在 QXmlStream Bookmarks Example 中,它封装了 QXmlStreamReader。阅读实现以了解更多关于如何使用 QXmlStreamReader 类的信息。

QXmlStreamReader 配对的是 QXmlStreamWriter 类,它提供具有简单流式API的XML写入器。QXmlStreamWriter 对一个 QIODevice 操作,并且为所有你想要写入的XML标记或事件提供专门的函数,如 writeDTD (),writeCharacters (),writeComment () 等。

要使用 QXmlStreamWriter 编写 XML 文档,你需要使用 writeStartDocument() 函数开始文档,并使用 writeEndDocument() 函数结束它,这将隐式关闭所有打开的标签。元素标签使用 writeStartDocument() 打开,然后使用 writeAttribute() 或 writeAttributes(),元素内容,然后使用 writeEndDocument() 结束。此外,可以使用 writeEmptyElement() 编写空元素。

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

XbelWriter 类来自 QXmlStream Bookmarks Example,它包装了一个 QXmlStreamWriter。查看实现以了解如何使用 QXmlStreamWriter 类。

© 2024 The Qt Company Ltd. 本文档中的文档贡献归其各自所有者所有。本文档受到根据自由软件基金会发布的 GNU 自由文档许可证(版本 1.3) 许可的条款许可。Qt 和相应商标是 The Qt Company Ltd. 在芬兰和/或世界其他国家的注册商标。所有其他商标均为其各自所有者的财产。