Qt的Dom来操作XML文档

本文介绍如何使用Qt中的DOM方法读取和解析XML文件,并详细展示了如何创建新的XML节点及更新现有XML文档的过程。

Qt有三种方式读取并解析XML文档,同样有三种方式写XML,不过在下还是喜欢标准,所以使用DOM方式来解析和保存XML文档

首先是读取XML

 1     QFile file(fileName);
 2     if (!file.open(QFile::ReadOnly | QFile::Text)) {
 3         return false;
 4     }
 5     QString errorStr;
 6     int errorLine;
 7     int errorColumn;
 8 
 9     QDomDocument doc;
10     if (!doc.setContent(&file, false&errorStr, &errorLine, &errorColumn)) {
11         return false;
12     }
13 
14     QDomElement root = doc.documentElement();
15     if (root.tagName() != "root") {
16         return false;
17     }
18     parseElement(root);
19     file.close();

 获取跟节点,然后把这个根节点交给其他函数去解析就OK

然后是写xml

 1     QFile file(fileName);
 2     if (!file.open(QFile::ReadOnly | QFile::Text))
 3         return false;
 4     QString errorStr;
 5     int errorLine;
 6     int errorColumn;
 7     QDomDocument doc;
 8     if (!doc.setContent(&file, false&errorStr, &errorLine, &errorColumn))
 9         return false;
10 
11     file.close();
12 
13     QDomElement root = doc.documentElement();
14     if (root.tagName() != "root")
15         return false;
16 
17     QDomElement element =  doc.createElement("file");
18 
19     QDomElement el_address = doc.createElement("address");
20     QDomText text_address = doc.createTextNode(address);
21     el_address.appendChild(text_address);
22 
23     element.appendChild(el_address);
24 
25     QDomElement el_path = doc.createElement("path");
26     QDomText text_path = doc.createTextNode(path);
27     el_path.appendChild(text_path);
28 
29     element.appendChild(el_path);
30 
31     root.appendChild(element);
32 
33     QFile f(fileName);
34     if (!f.open(QFile::WriteOnly | QFile::Text))
35         return false;
36 
37 
38     QTextStream out(&f);
39 //    element->save(out, 3);
40     root.save(out3);
41 //    doc.save(out, 3);
42     f.close();

 这里所有需要append的字节点只能由QDomDocument对象create,而不能直接new它,否则永远也看不到新添加的节点,另外,读取和写入的文件流必须创建两个,否则必然回将需要写入的文档继续在原来人当的后面,造成多个根节点。

 

 

 

 

转载于:https://www.cnblogs.com/firefly_liu/archive/2009/06/19/1506648.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值