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类,它提供了一个带有简单流式API的XML写入器。QXmlStreamWriter操作在QIODevice上,并具有用于所有你想要写入的XML标记或事件的专门函数,例如writeDTD()、writeCharacters()、writeComment()等。
要使用QXmlStreamWriter编写XML文档,您可以使用writeStartDocument()函数开始文档,并使用writeEndDocument()结束文档,这会隐式关闭所有剩余的开放标签。元素标签使用writeStartDocument()打开,然后使用writeAttribute()或writeAttributes(),元素内容,最后使用writeEndDocument()。此外,writeEmptyElement()可用于编写空元素。
元素内容包括字符、实体引用或嵌套元素。内容可以使用writeCharacters()函数编写,该函数还负责转义所有禁止的字符和字符序列,writeEntityReference(),或后续调用writeStartElement()。
XbelWriter 类来自 QXmlStream 书签示例,它封装了一个 QXmlStreamWriter。查看实现以了解如何使用 QXmlStreamWriter 类。