QT解析XML文件

本文介绍了QT中三种处理XML文件的方法:DOM、SAX和QXmlStreamReader。DOM将整个XML文档加载到内存中,适合小文件;SAX以事件形式处理,节省内存,适合大文件;QXmlStreamReader作为SAX的替代品,提供快速的流API,适用于处理大文件和查找特定标签。
摘要由CSDN通过智能技术生成

QT解析XML文件

一.QT提供三种处理XML文件方式

DOM(DocumentObject Model):将整个 XML 文档读入内存,构建成一个树结构,允许程序在树结构上向前向后移动导航,这是与另外两种方式最大的区别,也就是允许实现多次解析器(对应于 QXmlStreamReader 的一次解析器)。DOM 方式带来的问题是需要一次性将整个 XML 文档读入内存,因此会占用很大内存,这样就使得它不适合处理较大的文件。DOM是由 W3C 提出的一种处理 XML 文档的标准接口

SAX(Simple API forXML):提供大量虚函数,以事件的形式处理 XML 文档。这种解析办法主要是由于历史原因提出的,为了解决 DOM 的内存占用提出的(在现代计算机上,这个一般已经不是问题了),它提供了比 DOM更简单的接口,并且它不需要将整个 XML 文档一次性读入内存,这样便可以用来读取较大的文件。SAX 方法只适用于读取 XML 文档

QXmlStreamReader: QXmlStreamReader 类提供了一个快速的解析器通过一个简单的流API 来读取格式良好的 XML文档,它是作为 Qt 的 SAX 解析器的替代品的身份出现的,特别适合于实现一次解析器(所谓“一次解析器”,可以理解成我们只需读取文档一次,然后像一个遍历器从头到尾一次性处理 XML 文档,期间不会有反复的情况,也就是不会读完第一个标签,然后读第二个,读完第二个又返回去读第一个,这是不允许的)。使用 QXmlStreamReader 是 Qt 中最快最方便的读取 XML 的方法。因为 QXmlStreamReader 使用了递增式的解析器,适合于在整个 XML 文档中查找给定的标签、读入无法放入内存的大文件以及处理 XML 的自定义数据。

 

二.代码

CSAXPARSE类

H文件

#ifndefCSAXPARSE_H

#defineCSAXPARSE_H

#include<QXmlDefaultHandler>

 

classCSAXParse:publicQXmlDefaultHandler

{

public:

    CSAXParse();

    voidSetXMLData(char*xmlData);

protected:

    boolstartElement(constQString&namespaceURI,

                      constQString&localName,

                      constQString&qName,

                      constQXmlAttributes&atts);

    boolendElement(constQString&namespaceURI,

                    constQString&localName,

                    constQString&qName);

    boolcharacters(constQString&ch);

    boolfatalError(constQXmlParseException&exception);

};

 

#endif//CSAXPARSE_H

CPP文件

#include"CSaxParse.h"

#include<QDebug>

 

CSAXParse::CSAXParse()

{

 

}

 

voidCSAXParse::SetXMLData(char*xmlData)

{

    QXmlInputSourceinput;

    QStringdata=xmlData;

    qDebug()<<data;

    input.setData(data);

 

    QXmlSimpleReaderreader;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值