Qt的Dom来操作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它,否则永远也看不到新添加的节点,另外,读取和写入的文件流必须创建两个,否则必然回将需要写入的文档继续在原来人当的后面,造成多个根节点。

 

 

 

 

posted @ 2009-06-19 11:46  firefly_liu  阅读(4488)  评论(0编辑  收藏  举报