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

基于Qt的xml简单的读写笔记

2014-12-08 20:54 351 查看
以下是测试的xml:

<config>
<path>XXXXXXXXXXX</path>
<path1>XXXXXXXXXXX1</path1>
</config>


读写xml的代码:

#include "xmlutil.h"

XmlUtil::XmlUtil()
{
}

void XmlUtil::writeXml(QString& path,QMap<QString,QString>& map){
QFile file(path);
if(not file.open(QIODevice::ReadWrite))
return;
QDomDocument doc;
QDomElement rootEle = doc.createElement("config");
doc.appendChild(rootEle);

QMap<QString, QString>::const_iterator ite;
for( ite=map.constBegin(); ite!=map.constEnd(); ite++){
cout << ite.key().toStdString() <<"        " << ite.value().toStdString();
QDomElement pathEle = doc.createElement(ite.key());
pathEle.appendChild(doc.createTextNode(ite.value()));
rootEle.appendChild(pathEle);
}
QTextStream out(&file);
doc.save(out,QIODevice::ReadWrite);
file.close();
}
QMap<QString,QString>* XmlUtil::readXml(QString& path){
QMap<QString,QString>* map=new QMap<QString,QString>();
QFile file(path);
if(!file.open(QIODevice::ReadOnly)){
return NULL;
}
QDomDocument doc;
doc.setContent(&file);
QDomElement rootEle = doc.documentElement();

//把全部二级item存放在list中
QDomNodeList secondItemlist = rootEle.childNodes();

for(int i = 0;i < secondItemlist.count();i++) {
QDomNode node    = secondItemlist.at(i);
//          cout<<endl<<node.toElement().nodeName().toStdString()<<"000000000000"<<node.toElement().text().toStdString()<<"++++++++++++++++"<<endl;
map->insert(node.toElement().nodeName(),node.toElement().text());

}//end for

file.close();
return map;
}


测试:

QMap<QString,QString> map;
map.insert("path","XXXXXXXXXXX");
map.insert("path1","XXXXXXXXXXX1");
XmlUtil xml;
QString path=QString::fromStdString("config.xml");
xml.writeXml(path,map);
QMap<QString,QString>* ret=xml.readXml(path);

QMap<QString, QString>::const_iterator ite;
for( ite=ret->constBegin(); ite!=ret->constEnd(); ite++){
cout << ite.key().toStdString() <<"        " << ite.value().toStdString();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: