美文网首页我爱编程
Qt之XML文件的读取和存储

Qt之XML文件的读取和存储

作者: YBshone | 来源:发表于2017-11-28 14:32 被阅读0次

    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

    相关文章

      网友评论

        本文标题:Qt之XML文件的读取和存储

        本文链接:https://www.haomeiwen.com/subject/tcgdbxtx.html