用Qt解析XML:Qt6 的更新

2019年12月3日(星期二)库拉兹扬 | 评论意见

我们上一篇关于用Qt解析XML文档的文章已经有一段时间了。我想对即将发布的版本中的预期变化提供一些更新。但是首先,让我们总结一下Qt当前为读取和编写XML文档提供了什么。

QTXML模块

本模块提供了两个用于读取和写入XML文件的不同模型的实现:DocumentObjectModel(多姆)和简单的XML API(萨克斯)。使用DOM模型,整个XML文件被加载到内存中并表示为一棵树,这允许轻松地访问和操作其节点。DOM通常用于您不太关心内存的应用程序中。另一方面,SAX是一个基于事件的XML解析器,不会将整个XML文档加载到内存中。相反,它在解析时为令牌生成事件,由用户来处理这些事件。应用程序必须实现处理程序接口(完全或部分通过使用QXmlDefaultHandler)。许多人发现这不方便,因为这迫使他们围绕这个模型构建代码。

另一个问题是,SAX的当前实现(因此是DOM,因为它是使用SAX实现的)并不完全符合XML标准。考虑到这些缺点,QT不建议不再使用SAX,并且决定从QT5.15开始取消这些类。

QXmlStreamReader和QXmlStreamWriter

幸运的是,qt提供了XML流类作为处理XML文件的更方便和符合XML标准的替代方法。你也可以退房博客文章,可以快速介绍Qt中的XML流。

Qt 6会发生什么变化?

如前所述,SAX类将很快被废弃,这意味着QDomDocument不能再用了。这就是为什么使用QXmlStreamReader。Qt 6将切换到新的实现,但旧的Qt版本仍将使用旧的实现,因为新的实现带来了一些行为更改,我们不希望在Qt 6之前这样做。

这个更改对QTDOM用户意味着什么?自QXmlStreamReader更严格地遵循XML规范,QDomDocument将从Qt 6开始执行相同的操作。QDomDocument:

如果你用QDomDocument并且依赖其中的任何一个,请考虑相应地更新您的代码和XML文档。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页