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