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();
}