Qt工作笔记-对QXmlStreamReader的进一步认识(读取XML)
程序员文章站
2022-07-13 22:02:51
...
代码如下:
#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>
运行截图如下:
推荐阅读
-
Qt工作笔记-对QImage的进一步认识(关于α通道)
-
Qt工作笔记-对QXmlStreamReader的进一步认识(读取XML)
-
Qt工作笔记-对QObject::connect函数进一步认识(重载)
-
C++工作笔记-对结构体的进一步认识
-
Qt工作笔记-qmake和uic(对Qt底层的进一步认识)
-
Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)
-
Qt工作笔记-对QXmlStreamWriter进一步的认识(写复杂的XML文件)
-
C语言工作笔记-对函数指针的进一步认识(与回调函数结合使用,并且对比C++的回调)
-
C++工作笔记-对继承的进一步认识
-
Qt工作笔记-对Qt工作线程的进一步理解