qt中对 xml 文件的处理方式汇总

qt中对xml文件的三种处理方式

  • XML 由 World Wide Web Consortium(W3C)发布,作为 SHML(Standard Generalized Markup Language)的一种轻量级方言。XML 语法类似于 HTML,与后者的主要区别在于 XML 的标签不是固定的,而是可扩展的。XML的设计宗旨是传输和存储数据,而非显示(HTML)。

针对 XML 的通用处理,Qt4 提供了 QtXml 模块;针对 XML 文档的 Schema 验证以及 XPath、XQuery 和 XSLT,Qt4 和 Qt5 则提供了 QtXmlPatterns 模块。
qt 提供了 三种 处理方式

  • DOM(Document Object Model):将整个 XML 文档读入内存,构建成一个树结构,允许程序在树结构上向前向后移动导航,这是与另外两种方式最大的区别,也就是允许实现多次解析器(对应于 QXmlStreamReader 的一次解析器)。DOM 方式带来的问题是需要一次性将整个 XML 文档读入内存,因此会占用很大内存,这样就使得它不适合处理较大的文件。DOM 是由 W3C 提出的一种处理 XML 文档的标准接口。
  • SAX(Simple API for XML):提供大量虚函数,以事件的形式处理 XML 文档。这种解析办法主要是由于历史原因提出的,为了解决 DOM 的内存占用提出的(在现代计算机上,这个一般已经不是问题了),它提供了比 DOM 更简单的接口,并且它不需要将整个 XML 文档一次性读入内存,这样便可以用来读取较大的文件。SAX 方法只适用于读取 XML 文档。
  • QXmlStreamReader: QXmlStreamReader 类提供了一个快速的解析器通过一个简单的流 API 来读取格式良好的 XML文档,它是作为 Qt 的 SAX 解析器的替代品的身份出现的,特别适合于实现一次解析器(所谓“一次解析器”,可以理解成我们只需读取文档一次,然后像一个遍历器从头到尾一次性处理 XML 文档,期间不会有反复的情况,也就是不会读完第一个标签,然后读第二个,读完第二个又返回去读第一个,这是不允许的)。使用 QXmlStreamReader 是 Qt 中最快最方便的读取 XML 的方法。因为 QXmlStreamReader 使用了递增式的解析器,适合于在整个 XML 文档中查找给定的标签、读入无法放入内存的大文件以及处理 XML 的自定义数据。

在 Qt4 中,这三种方式都位于 QtXml 模块中。Qt5 则将QXmlStreamReader/QXmlStreamWriter 移动到 QtCore 中,QtXml 则标记为“不再维护”,这已经充分表明了 Qt 的官方意向。

至于生成 XML 文档,Qt 同样提供了三种方式:

  • 纯手工生成 XML 文档,显然,这是最复杂的一种方式。
  • DOM 方式:首先在内存中生成 DOM 树,然后将 DOM 树写入文件。不过,除非我们程序的数据结构中本来就维护着一个 DOM 树,否则,临时生成树再写入肯定比较麻烦。
  • QXmlStreamWriter:与QXmlStreamReader相对应。
代码下载: https://download.csdn.net/download/p942005405/10315742

猜你喜欢

转载自blog.csdn.net/p942005405/article/details/79743221