天天看点

QDomDocument读写XML文件

XML文件大家应该都很熟悉,与ini一样,xml也是常用的软件配置文件格式。

在读写一个xml文件之前, 首先要做的工作是设计好xml文件的结构。

XMLSpy这个工具在xml设计方面有显著的优势,本人使用的是XMLSpy  2015,可以上官网http://www.altova.com/download-trial.html下载,并申请试用版本的序列号。

设计完的结构如下:

QDomDocument读写XML文件

设计完结构之后,可以导出例子xml文件如下:

QDomDocument读写XML文件

到这里,我们的xml文件就设计好了,剩下的就是用Qt来实现xml的读写操作。

Qt中实现对xml读写操作的类是QDomDocument相关的类,一般情况下需要包含下列三个头文件:

#include <QFile>   
#include <QtXml\QtXml>
#include <QtXml\QDomDocument> 
           

(1)写XML

主要会用到下面的几个函数:

QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);

QDomElement root = doc.createElement("HInfoData");//创建根节点
doc.appendChild(root);//添加根节点

QDomElement strMac = doc.createElement("Mac");//创建元素节点
root.appendChild(strMac);//添加元素节点到根节点
QDomText strMacNodeText = doc.createTextNode(data._strMac);//创建元素文本
strMac.appendChild(strMacNodeText);//添加元素文本到元素节点
           

保存成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();//读取根节点
QDomNode node = root.firstChild();//读取第一个子节点
while (!node.isNull())
{
	QString tagName = node.toElement().tagName();
	if (tagName.compare("Mac") == 0) //节点标记查找
	{
		infodata._strMac = node.toElement().text();//读取节点文本
	}
	else if (tagName.compare("System") == 0)
	{
		infodata._strSystem = node.toElement().text();
	}
	node = node.nextSibling();//读取下一个兄弟节点
}
           

Qt中QDomDocument实现XML读写大致就这些内容,剩下一些细节可以查看Qt Assistant。

继续阅读