XML文件大家應(yīng)該很熟悉搁进,與ini一樣浪感,XML也是常用的軟件配置文件格式。
在寫一個(gè)XML文件之前饼问,首先工作是設(shè)計(jì)好XML文件的結(jié)構(gòu)影兽。
這個(gè)時(shí)候推薦一款好用的XML設(shè)計(jì)工具XMLSpy
可以在官網(wǎng)下載安裝https://www.altova.com/download,并申請(qǐng)使用版本序列號(hào)莱革。
設(shè)計(jì)完的結(jié)構(gòu)如下:
設(shè)計(jì)完結(jié)構(gòu)之后峻堰,可以導(dǎo)出例子XML文件如下:
到這里讹开,我們的xml文件就設(shè)計(jì)好了,剩下的就是用Qt來實(shí)現(xiàn)xml的讀寫操作茧妒。
Qt中實(shí)現(xiàn)對(duì)xml讀寫操作的類是QDomDocument相關(guān)的類萧吠,一般情況下需要包含下列三個(gè)頭文件:
#include <QFile>
#include <QtXml\QtXml>
#include <QtXml\QDomDocument>
(1)寫XML
主要會(huì)用到下面的幾個(gè)函數(shù):
QDomDocument doc; //QDomDocument類
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
QDomElement root = doc.createElement("HInfoData");//創(chuàng)建根節(jié)點(diǎn) QDomElemet元素
doc.appendChild(root);//添加根節(jié)點(diǎn)
QDomElement strMac = doc.createElement("Mac");//創(chuàng)建元素節(jié)點(diǎn)
root.appendChild(strMac);//添加元素節(jié)點(diǎn)到根節(jié)點(diǎn)
QDomText strMacNodeText = doc.createTextNode(data._strMac);//創(chuàng)建元素文本
strMac.appendChild(strMacNodeText);//添加元素文本到元素節(jié)點(diǎn)
保存成xml文件
QFile file("./test.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
return false;
QTextStream out(&file);
out.setCodec("UTF-8");
doc.save(out, 4, QDomNode::EncodingFromTextStream);
file.close();
(2)讀XML
QDomDocument doc;
QFile file("./test.xml");
if (!file.open(QIODevice::ReadOnly))
{
return false;
}
if (!doc.setContent(&file))
{
file.close();
return false;
}
file.close();
QDomElement root = doc.documentElement();//讀取根節(jié)點(diǎn)
QDomNode node = root.firstChild();//讀取第一個(gè)子節(jié)點(diǎn) QDomNode 節(jié)點(diǎn)
while (!node.isNull())
{
QString tagName = node.toElement().tagName(); //節(jié)點(diǎn)元素名稱
if (tagName.compare("Mac") == 0) //節(jié)點(diǎn)標(biāo)記查找
{
infodata._strMac = node.toElement().text();//讀取節(jié)點(diǎn)文本
}
else if (tagName.compare("System") == 0)
{
infodata._strSystem = node.toElement().text();
}
node = node.nextSibling();//讀取下一個(gè)兄弟節(jié)點(diǎn)
}
Qt中QDomDocument實(shí)現(xiàn)XML讀寫大致就這些內(nèi)容左冬,剩下一些細(xì)節(jié)可以查看Qt Assistant