qt xml组包_QT 读取XML详解(转)

本文介绍了如何使用Qt中的QDomDocument类和QXmlStreamReader类来处理XML文件。QDomDocument适合小文件,将整个XML文档加载到内存,方便随机访问节点,而QXmlStreamReader采用顺序读取方式,适用于处理大型XML文件。文章通过实例展示了如何读取、创建和修改XML节点,并对比了DOM和SAX两种解析方式的特点。
摘要由CSDN通过智能技术生成

用Qt中的QDomDocument类处理XML文件

XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SVG矢量图形也使用了XML格式。

我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而Qt为XML提供了很好的支持,包括DOM的实现和SAX的实现。

DOM

是Document Object

Model的简称,其实现方式是将整个文档当作一个对象来装入内存进行处理,然后开发者可以访问这个对象中的每一个节点,每一个节点对应XML文件里的一

个标记。这种方式的优点是操作非常简单,缺点是需要将整个文件放入内存,不适合处理过大文件。这种方式在Qt中的实现类是QDomDocument,也是

本文将要讲解的。以Blog为代表的RSS文件都不会很大,适合用这种方式来处理。

SAX是Simple API for

XML的简称,其实现方式是按阶段将文档读取到内存中,在碰到标签或者其它阶段的时候,调用开发者预先设计好的回调函数去处理。这种方式的缺点是需要开发

者写回调函数去处理不同标签,代码复杂一些,优点是能处理很大的XML文件。这种方式在Qt中的实现类叫QXmlStreamReader。

——————分割线以下,代码讲解———-

1)如果需要使用QDomDocument,那么请在你的项目.pro文件里加上一句”QT += xml”,不然无法编译通过。

2)

QDomDocument

doc;QFile file("rss.xml");QString errorStr;int errorLine; int

errorCol;//setContent是将指定的内容指定给QDomDocument解析,//第一参数可以是QByteArray或者是文件名等

if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol)){

//如果出错,则会进入这里。errorStr得到的是出错说明 //errorLine和errorCol则是出错的行和列}

如果上面的步骤没出错,那么恭喜你,你已经得到了一个完整的QDomDocument对象doc,你只要访问doc的子节点或子子节点就可以取得XML中所有标记上的内容了。

3)

可以通过doc.childNodes()获得doc的所有的子节点列表QDomNodeList。比如

QDomNodeList

list=doc.childNodes(); for(int i=0;i

node=list.at(i);//好的风格当然是把定义写在外面:( //qDebug()<

"<

"<<.nodetype>

通过上面的方法你就能知道每个节点的名字和类型了,节点名字就是标记的名字。打印出来

对照着xml文件看就很容易明白了。QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值