XML流式传输
Qt提供两个类通过简单的流式API读取和写入XML: QXmlStreamReader 和 QXmlStreamWriter。这些类位于 Qt序列化(属于QtCore的一部分)。
流式读取器将XML文档报告为标记流。这与SAX不同,因为SAX应用程序提供处理程序以接收来自解析器的XML事件,而 QXmlStreamReader 驱动循环,在需要时从读取器中提取标记。这种拉取方法使得建立递归下降解析器成为可能,允许将XML解析代码拆分为不同的方法或类。
QXmlStreamReader 是一个格式化良好的XML 1.0解析器,不包括外部解析实体。因此,由流式读取器提供的数据符合W3C的格式良好的XML标准,只要没有错误发生。否则,可以使用函数如 atEnd(),error 和 hasError 检查和查看错误。
一个使用 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. 在芬兰和/或世界其他国家的注册商标。所有其他商标均为其各自所有者的财产。