Qt使用Dom操作XML文件

Qt中对于XML文件的写入有两种方式,一个是使用QXmlStreamWriter,另一个则为使用Dom。stream流的形式相对来说更加灵活,而且适合处理大文件。Dom方式由于是将内容加载到了内存中进行操作,所以对于小内存设备则有一定得局限性。

下面给出一个用Dom写xml文件的例子。

假设定义的节点如下

<?xml version="1.0" encoding="UTF-8"?> <data> <startweek>2010-03-01</startweek> <readnum>3</readnum> <alarm>7</alarm> <prompt>Alarm Window</prompt> </data>

则将其写为xml文件时,方法如下:

QFile file("write.xml"); if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate)); QDomDocument doc; QDomProcessingInstruction instruction; instruction = doc.createProcessingInstruction("xml","version=/"1.0/" encoding=/"UTF-8/""); doc.appendChild(instruction); QDomElement root=doc.createElement(tr("data")); doc.appendChild(root); QDomElement StartWeek=doc.createElement(tr("startweek")); QDomElement ReadNumber=doc.createElement(tr("readnum")); QDomElement AlarmTime=doc.createElement(tr("alarm")); QDomElement AlarmPrompt=doc.createElement(tr("prompt")); QDomText text; text=doc.createTextNode("2010-03-01"); StartWeek.appendChild(text); text=doc.createTextNode("2"); ReadNumber.appendChild(text); text=doc.createTextNode("10"); AlarmTime.appendChild(text); text=doc.createTextNode("vibration"); AlarmPrompt.appendChild(text); root.appendChild(StartWeek); root.appendChild(ReadNumber); root.appendChild(AlarmTime); root.appendChild(AlarmPrompt); QTextStream out(&file); doc.save(out,4); file.close();

QDomProcessingInstruction instruction;

instruction = doc.createProcessingInstruction("xml","version=/"1.0/" encoding=/"UTF-8/"");

用来写入XML文件的声明,这对于一个XML文件来说不可缺少。

其次写入根节点,然后依次写入相应的子节点。最后从内存写入文件中。

如果需要用Dom方式对其进行解析,则其为一逆过程,方法如下:

QDomDocument doc; QFile file("../TEA_Main/files/sysconfig.xml"); if (!file.open(QIODevice::ReadOnly)) return; if (!doc.setContent(&file)) { file.close(); return; } file.close(); QDomElement docElem = doc.documentElement(); QDomNode n = docElem.firstChild(); while(!n.isNull()) { QDomElement e = n.toElement(); // try to convert the node to an element. if(!e.isNull()) { qDebug()<<e.tagName() << ":" << e.text(); } n = n.nextSibling(); } file.close(); }

使用一个while循环将节点内容读入内存,并根据自己的方式进行处理即可。

和前面的QXmlStreamReader解析XML相比,Dom显然简洁很多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值