#ifndef XMLSTREAMREADER_H
#define XMLSTREAMREADER_H
#include <vector>
#include <QXmlStreamReader>
class XMLStreamReader
{
public:
XMLStreamReader();
bool readFile(const QString &fileName);
private:
void readBookindexElement();
void readEntryElement();
void readPageElement();
void skipUnknownElement();
public:
QXmlStreamReader reader;
std::vector<QString> vec;
};
#endif // XMLSTREAMREADER_H
#include "xmlstreamreader.h"
#include <QFile>
#include <QDebug>
XMLStreamReader::XMLStreamReader()
{
}
bool XMLStreamReader::readFile(const QString &fileName)
{
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text))
{
qDebug()<<"Open XML file Error";
return false;
}
reader.setDevice(&file);
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "FY4Config")
{
readBookindexElement();
}
else
{
Q_ASSERT(reader.isStartElement() && (reader.name() == "FY4Config")); //断言
reader.raiseError(QObject::tr("Not a BookIndex file"));
}
}
else
{
reader.readNext();
}
}
file.close();
if(reader.hasError())
{
qDebug()<<reader.errorString();
return false;
}
else if(file.error() != QFile::NoError)
{
qDebug()<<file.errorString();
return false;
}
return true;
}
void XMLStreamReader::readBookindexElement()
{
reader.readNext();
while(!reader.atEnd())
{
if(reader.isStartElement())
{
if(reader.name() == "TimeIntervalList")
{
readEntryElement();
}
}
else
{
reader.readNext();
}
}
}
void XMLStreamReader::readEntryElement()
{
reader.readNext();
while(!reader.atEnd())
{
if(reader.isEndElement())
{
reader.readNext();
break;
}
if(reader.isStartElement())
{
if(reader.name() == "Time")
{
readPageElement();
}
}
else
{
reader.readNext();
}
}
}
void XMLStreamReader::readPageElement()
{
QString page = reader.readElementText();
if(reader.isEndElement())
reader.readNext();
vec.push_back(page);
}
void XMLStreamReader::skipUnknownElement()
{
reader.readNext();
while(!reader.atEnd())
{
if(reader.isEndElement())
{
reader.readNext();
break;
}
if(reader.isStartElement())
{
skipUnknownElement();
}
else
{
reader.readNext();
}
}
}
#include <QCoreApplication>
#include "xmlstreamreader.h"
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
XMLStreamReader reader;
reader.readFile("E:/project/untitled/TimeIntervalList.xml");
for(int i = 0; i < reader.vec.size(); i++)
{
qDebug() << i << reader.vec.at(i);
}
return a.exec();
}
<?xml version="1.0" encoding="UTF-8"?>
<FY4Config>
<TimeIntervalList>
<Time>0.1</Time>
<Time>0.2</Time>
<Time>0.3</Time>
<Time>0.4</Time>
<Time>0.5</Time>
<Time>0.6</Time>
<Time>0.7</Time>
<Time>0.8</Time>
<Time>0.9</Time>
<Time>0.10</Time>
<Time>0.11</Time>
<Time>0.12</Time>
<Time>0.13</Time>
<Time>0.14</Time>
</TimeIntervalList>
</FY4Config>