欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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工作笔记-对QXmlStreamReader的进一步认识(读取XML)

相关标签: Qt XML C++