我爱编程

Qt之XML文件的读取和存储

2017-11-28  本文已影响0人  YBshone

XML文件大家应该很熟悉,与ini一样,XML也是常用的软件配置文件格式。
在写一个XML文件之前,首先工作是设计好XML文件的结构。
这个时候推荐一款好用的XML设计工具XMLSpy可以在官网下载安装https://www.altova.com/download,并申请使用版本序列号。
设计完的结构如下:

XML设计结构图
设计完结构之后,可以导出例子XML文件如下:
XML文件样式
到这里,我们的xml文件就设计好了,剩下的就是用Qt来实现xml的读写操作。

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

#include <QFile>     
#include <QtXml\QtXml>  
#include <QtXml\QDomDocument>   
(1)写XML

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

QDomDocument doc;  //QDomDocument类
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");  
doc.appendChild(instruction);  
  
QDomElement root = doc.createElement("HInfoData");//创建根节点  QDomElemet元素
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();//读取第一个子节点   QDomNode 节点
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

上一篇下一篇

猜你喜欢

热点阅读