您的位置:首页 > 编程语言 > Qt开发

Qt的Dom来操作XML文档

2009-06-19 11:46 597 查看
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;
if (!doc.setContent(&file, false, &errorStr, &errorLine, &errorColumn)) {
return false;
}

QDomElement root = doc.documentElement();
if (root.tagName() != "root") {
return false;
}
parseElement(root);
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;

file.close();

QDomElement root = doc.documentElement();
if (root.tagName() != "root")
return false;

QDomElement element = doc.createElement("file");

QDomElement el_address = doc.createElement("address");
QDomText text_address = doc.createTextNode(address);
el_address.appendChild(text_address);

element.appendChild(el_address);

QDomElement el_path = doc.createElement("path");
QDomText text_path = doc.createTextNode(path);
el_path.appendChild(text_path);

element.appendChild(el_path);

root.appendChild(element);

QFile f(fileName);
if (!f.open(QFile::WriteOnly | QFile::Text))
return false;

QTextStream out(&f);
// element->save(out, 3);
root.save(out, 3);
// doc.save(out, 3);
f.close(); 这里所有需要append的字节点只能由QDomDocument对象create,而不能直接new它,否则永远也看不到新添加的节点,另外,读取和写入的文件流必须创建两个,否则必然回将需要写入的文档继续在原来人当的后面,造成多个根节点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: