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 xml 读写

DOM解析xml实现读写增删改

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

如何在qt中添加xml文件