快捷搜索: 王者荣耀 脱发

QT XML文件的生成与解析之——QDomDocument

1.在.pro文件里加上QT += xml 2. 读写文件

#ifndef CFILEDATA_PRASEXML_H
#define CFILEDATA_PRASEXML_H
#include <QDomDocument>
#include <QDomElement>
#include <QList>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>

class Zone
{
public:
    int nId;
    QString sName;
    QString population;
};

class Province
{
public:
    Province(){
       sName = "";
       sReferredName = "";
       m_listZone.clear();
    }
    ~Province(){
        qDeleteAll(m_listZone);
        m_listZone.clear();
    }
public:
  QString        sName;
  QString        sReferredName;
  QList<Zone*>   m_plistZone;
};

class CFileData_PraseXml
{
public:
    CFileData_PraseXml();
    ~CFileData_PraseXml();
public:
    bool  ParseFileXml();
    bool  generateFileXml(QByteArray&arr);
private:
    QString sName;
    QString sContinent;
    QList<Province*>  m_plistProvince;
};

#endif // CFILEDATA_PRASEXML_H
#include "cfiledata_prasexml.h"

CFileData_PraseXml::CFileData_PraseXml()
{
          
   

}

CFileData_PraseXml::~CFileData_PraseXml()
{
          
   
    qDeleteAll(m_plistProvince);
    m_plistProvince.clear();
}

bool CFileData_PraseXml::ParseFileXml()
{
          
   
   QString sFileName = QFileDialog::getOpenFileNames(this,QString("打开文件"),
                                                     "/home/","xml files(*.xml)");

   QFile file(sFileName);
   if(!file.open(QIODevice::ReadOnly |QIODevice::Truncate )){
          
   
       return false;
   }

   QByteArray arr = file.readAll();
   QDomDocument dom;
   if(!dom.setContent(arr)){
          
   
       return false;
   }
   QDomElement rootEle = dom.documentElement();
   if(rootEle.isNull()){
          
   
       return false;
   }

   QDomElement countryListEle = rootEle.firstChildElement("countryList");
   if(countryListEle.isNull()){
          
   
       return false;
   }
   qDeleteAll(m_plistProvince);
   m_plistProvince.clear();

   sName = countryListEle.attribute("name");
   sContinent = countryListEle.attribute("continent");

   QDomElement privanceEle = countryListEle.firstChildElement("Privance");
   while(!privanceEle.isNull()){
          
   
       Province* pNewProvince = new Province;
       pNewProvince->sName = privanceEle.attribute("name");
       pNewProvince->sReferredNamereferredName = privanceEle.attribute("referredName");
       this->m_plistProvince.append(pNewProvince);

       QDomElement zoneEle = privanceEle.firstChildElement("zone");
       while(!zoneEle.isNull()){
          
   
           Zone* pZone = new Zone;
           pZone->nId = zoneEle.attribute("id").toInt();
           pZone->sName = zoneEle.attribute("zone");
           pZone->population = zoneEle.attribute("population");
           pNewProvince->m_plistZone.append(pZone);
           zoneEle = zoneEle.nextSiblingElement("zone");
       }
       privanceEle = privanceEle.nextSiblingElement("Privance");
   }
   return true;
}

bool CFileData_PraseXml::generateFileXml(QByteArray &arr)
{
          
   
   QDomDocument domDoc;
   QDomProcessingInstruction instruction;
   instruction = domDoc.createProcessingInstruction("xml","version="1.0" encoding="utf-8"");
   domDoc.appendChild(instruction);

   QDomElement root = domDoc.createElement("Root");
   domDoc.appendChild(root);

   QDomElement countryList = domDoc.createElement("countryList");
   countryList.setAttribute("name",this->sName);
   countryList.setAttribute("continent",this->sContinent);

   foreach(Province* pro, this->m_plistProvince){
          
   
       QDomElement ele = domDoc.createElement("Province");
       ele.setAttribute("name",pro->sName);
       ele.setAttribute("referredName",pro->sReferredName);
       countryList.appendChild(ele);
       foreach(Zone*pZone, pro->m_plistZone){
          
   
           QDomElement eleChild = domDoc.createElement("Zone");
           eleChild.setAttribute("id",pZone->nId);
           eleChild.setAttribute("name",pZone->sName);
           eleChild.setAttribute("population",pZone->population);
           ele.appendChild(eleChild);
       }
   }

   arr = domDoc.toByteArray();
}
经验分享 程序员 微信小程序 职场和发展