代码如下:
#include <QApplication> #include <QDebug> #include <QFile> #include <QVector> #include <QXmlStreamReader> typedef struct SystemData{ QString nameStr1; QString nameStr2; QString nameStr3; QString nameStr4; QString nameStr5; double dataDouble; int dataInt1=-1; int dataInt2=-1; int dataInt3=-1; }SystemData; typedef QVector<SystemData*> SystemVec; int main(int argc, char *argv[]) { QApplication a(argc, argv); QFile file("E:\\Qt2018\\ReadXMLLastDemo\\my.xml"); if(!file.open(QFile::ReadOnly|QFile::Text)){ qDebug()<<"读取XML文件时,文件打开失败"; return false; } QXmlStreamReader reader; reader.setDevice(&file); int Count=0; SystemVec systemVec; SystemData *tempSysData=new SystemData; while(!reader.atEnd()){ reader.readNext(); if(reader.name().toString()=="name1"){ tempSysData->nameStr1=reader.readElementText(); } if(reader.name().toString()=="name2") tempSysData->nameStr2=reader.readElementText(); if(reader.name().toString()=="name3") tempSysData->nameStr3=reader.readElementText(); if(reader.name().toString()=="name4") tempSysData->nameStr4=reader.readElementText(); if(reader.name().toString()=="name5") tempSysData->nameStr5=reader.readElementText(); if(reader.name().toString()=="double") tempSysData->dataDouble=reader.readElementText().toDouble(); if(reader.name().toString()=="int1") tempSysData->dataInt1=reader.readElementText().toInt(); if(reader.attributes().hasAttribute("include")) tempSysData->dataInt2=reader.attributes().value("include").toString().toInt(); if(reader.name().toString()=="int3") tempSysData->dataInt3=reader.readElementText().toInt(); if(tempSysData->dataInt3!=-1){ Count++; systemVec.append(tempSysData); //此处无Delete,直接new,数据已经加载进m_subsystemVec中了 tempSysData=new SystemData; } } file.close(); //如果多加了一个,现在进行释放 if(tempSysData->dataInt3!=-1){ delete tempSysData; } return a.exec(); }
xml文件如下:
<?xml version="1.0" encoding="utf-8"?> <test> <data1> <name1>你妹</name1> <name2>你妹妹</name2> <name3>你妹妹妹</name3> <name4>你妹妹妹妹</name4> <name5>你妹妹妹妹妹</name5> <double>3.1415</double> <int1>10</int1> <attribution include="100"> <int3>1000</int3> </attribution> </data1> <data2> <name1>你姐</name1> <name2>你姐姐</name2> <name3>你姐姐姐</name3> <name4>你姐姐姐姐</name4> <name5>你姐姐姐姐姐</name5> <double>6.6666</double> <int1>66</int1> <attribution include="666"> <int3>66666</int3> </attribution> </data2> </test>
运行截图如下: