Qt之读写XML文件
Posted Harry工作空间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt之读写XML文件相关的知识,希望对你有一定的参考价值。
一、XML文件格式
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<a>
<b>1</b>
<c>1</c>
<d>13</d>
<e>牛逼</e>
</a>
<a>
<b>1</b>
<c>1</c>
<d>14</d>
<e>这牛逼</e>
</a>
</XML>
二、读XML文件
bool EXPORT_XML_WIDGET::readXML()
{
DATA temp;//结构体DATA
QString dirPath = QFileDialog::getOpenFileName(this,"open","H:/","XML files(*.xml)");
QDomDocument doc;
QFile file(dirPath);
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(this,tr("提示"),tr("打开XML文件失败!"),QMessageBox::Yes);
return false;
}
if (!doc.setContent(&file))
{
file.close();
return false;
}
file.close();
QDomElement child = doc.documentElement();//读取根节点
if(child.toElement().tagName() == "XML")
{
QDomNode child_1 = child.toElement().firstChild();
while(!child_1.isNull())
{
if(child_1.toElement().tagName() == "a")
{
QDomNode child_2 = child_1.toElement().firstChild();
while(!child_2.isNull())
{
if(child_2.toElement().tagName() == "b")
{
if(child_2.toElement().text().toInt() == 1)
{
temp.type = "直流";
}
else
{
temp.type = "交流";
}
}
else if(child_2.toElement().tagName() == "c")
{
temp.seriNo = child_2.toElement().text().toInt()+1;
}
else if(child_2.toElement().tagName() == "d")
{
temp.branchNo = child_2.toElement().text().toInt()+1;
}
else if(child_2.toElement().tagName() == "e")
{
temp.name = child_2.toElement().text();
adddata_Arr.append(temp); //adddate_Arr为QVector
}
child_2 = child_2.nextSibling();
}
}
child_1 = child_1.nextSibling();
}
}
return true;
}
三、 写XML文件
void EXPORT_XML_WIDGET::writeXML()
{
QVector<DATA>::iterator iter;
//打开或创建文件
QString dir = QFileDialog::getExistingDirectory(this, tr("选择存放路径"),
"H:/",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
QString dirPath;
dirPath=tr("%1/write.xml").arg(dir);
QFile file(dirPath);
if(!file.open(QIODevice::ReadWrite|QIODevice::Text|QIODevice::Truncate))
{
qDebug() << "File open error";
return;
} else
{
qDebug() <<"File open!";
}
QDomDocument doc;
//写入xml头部
QDomProcessingInstruction instruction; //添加处理命令
instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
//添加根节点
QDomElement root=doc.createElement("XML");
doc.appendChild(root);
//添加第一个子节点及其子元素
for (iter=adddata_Arr.begin();iter!=adddata_Arr.end();iter++)
{
QDomElement change=doc.createElement("a");
QDomElement b=doc.createElement("b"); //创建子元素
QDomText text;
if(iter->type == "直流")
{
text=doc.createTextNode(QString::number(1));
b.appendChild(text);
a.appendChild(type);
}
else
{
text=doc.createTextNode(QString::number(0));
b.appendChild(text);
a.appendChild(b);
}
QDomElement c=doc.createElement("c"); //创建子元素
text=doc.createTextNode(QString::number(iter->seriNo - 1));
c.appendChild(text);
a.appendChild(c);
QDomElement d = doc.createElement("d"); //创建子元素
text=doc.createTextNode(QString::number(iter->branchNo - 1));
d.appendChild(text);
a.appendChild(d);
QDomElement e = doc.createElement("e"); //创建子元素
text=doc.createTextNode(iter->name);
e.appendChild(text);
a.appendChild(e);
root.appendChild(a);
}
//输出到文件
QTextStream out_stream(&file);
out_stream.setCodec("UTF-8");
doc.save(out_stream,4); //缩进4格
file.close();
}
欢迎关注我的公众号“Harry工作空间”
以上是关于Qt之读写XML文件的主要内容,如果未能解决你的问题,请参考以下文章
QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写
Qt Write and Read XML File 读写XML文件
Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件