QTParseXML

XMLReader.h
#pragma once
#include <QXmlStreamReader>


class XMLReader
{
public:
    XMLReader();
    ~XMLReader();

public:
    void read(QIODevice *device);
    void readXRoot();
    void readCmd();
    void readInpara();
    void readROI();
    void parseInpara();
    void parseROI();

public:
    QXmlStreamReader xml;
    QString uuidalgorithm;
    QVector<QString> vectV;
    QVector<QString> vectD;
};


XMLReader.cpp
#include "XMLReader.h"
#include <QDebug>

#define ROOT_ELEMENT "cmds"
#define CMD_ELEMENT "cmd"
#define INPUTPARA_ELEMENT "inputParas"
#define INPUTROI_ELEMENT "inputROIs"
#define PARAVALUE "value"
#define ROIVALUE "ROI"
#define X "x"
#define Y "y"
#define WIDTH "width"
#define HEIGHT "height"
#define ANGLE "angle"
#define RADIUSI "radiusi"
#define RADIUSO "radiuso"

void XMLReader::read(QIODevice *device)
{
    xml.setDevice(device);
    while (!xml.atEnd()) {
        while (xml.readNextStartElement()) {
            QString strName = xml.name().toString();
            if (strName == ROOT_ELEMENT) {  // 获取根元素
                readXRoot();
            }
            else
            {
                xml.readNextStartElement();
            }
        }
    }
}

void XMLReader::readXRoot()
{
    while (xml.readNextStartElement()) {
        if (xml.name().toString() == CMD_ELEMENT) {
            QXmlStreamAttributes attributes = xml.attributes();
            if (attributes.hasAttribute("uuid")) {
                uuidalgorithm = attributes.value("uuid").toString();
            }
            readCmd();
        }
        else {
            xml.skipCurrentElement();  // 跳过当前元素
        }
    }
}

void XMLReader::readCmd()
{
    while (xml.readNextStartElement()) {
        qDebug() << xml.name().toString();
        if (xml.name().toString() == INPUTPARA_ELEMENT)
        {            
            parseInpara();
        }
        else if (xml.name().toString() == INPUTROI_ELEMENT)
        {
            readROI();
        }
        else {
            xml.skipCurrentElement();  // 跳过当前元素
        }
    }
}

void XMLReader::readROI()
{
    while (xml.readNextStartElement()) {
        qDebug() << xml.name().toString();
        if (xml.name().toString() == ROIVALUE) {
            parseROI();
        }
        else {
            xml.skipCurrentElement();  // 跳过当前元素
        }
    }
}

void XMLReader::parseInpara()
{
    
    while (xml.readNextStartElement()) {
        qDebug() << xml.name().toString();
        if (xml.name().toString() == PARAVALUE)
        {
            QXmlStreamAttributes attributes = xml.attributes();
            QString value = xml.readElementText();
            vectV.push_back(value);
        }
        else
        {
            xml.skipCurrentElement();  // 跳过当前元素
        }
    }
}

void XMLReader::parseROI()
{
    while (xml.readNextStartElement())
    {
        qDebug() << xml.name().toString();
        QString tmp;
            if (xml.name().toString() == X)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == Y)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == WIDTH)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == HEIGHT)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == ANGLE)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == RADIUSI)
            {
                tmp = xml.readElementText();
            }
            else if (xml.name().toString() == RADIUSO)
            {
                tmp = xml.readElementText();
            }
            else
            {
                xml.skipCurrentElement();  // 跳过当前元素
            }
            vectD.push_back(tmp);
    }
}

XMLReader::XMLReader()
{
}

XMLReader::~XMLReader()
{

}

main.cpp
#include <QApplication>
#include <QXmlStreamReader>
#include <QMessageBox>
#include <QFile>
#include <QDebug>
#include "XMLReader.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFile file("C:/Users/bm00059/Desktop/proFile/123.pro");
    if (file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        XMLReader reader;    //解析.pro file,目前仅对一组cmd时,OK
        reader.read(&file);    
    }
    file.close();
    return a.exec();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值