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