<?xml version="1.0"?>
<bookindex>
<ee>
1234
</ee>
<entry term="sidebearings">
<page>10</page>
<page>34-35</page>
<page>307-308</page>
</entry>
<entry term="subtraction">
<entry term="of pictures">
<page>115</page>
<page>244</page>
</entry>
<entry term="of vectors">
<page>9</page>
</entry>
</entry>
</bookindex>
#include <QtCore/QCoreApplication>
#include <QString>
#include <QFile>
#include <qtWidgets/QMessageBox>
#include <QDebug>
#include <QXmlStreamReader>
QXmlStreamReader reader;
void readFile(const QString fileName);
void readBookIndex();
void readEntry();
void readPage();
void skipUnknownElement();
void readFile(const QString fileName)
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly|QFile::Text))
{
return;
}
reader.setDevice(&file);
while (!reader.atEnd())
{
if (reader.isEndElement()) { break; }
if (reader.isStartElement())
{
if (reader.name() == "bookindex")
{
readBookIndex();
}
else
{
reader.raiseError("not exit bookindex");
}
}
else
{
reader.readNext();
}
}
}
void readBookIndex()
{
reader.readNext();
while (!reader.atEnd())
{
if (reader.isEndElement())
{
reader.readNext();
break;
}
if (reader.isStartElement())
{
if (reader.name() == "entry")
{
readEntry();
}
else
{
skipUnknownElement();
}
}
else
{
reader.readNext();
}
}
}
void readEntry()
{
qDebug() << reader.attributes().value("term").toString() << endl;
reader.readNext();
while (!reader.atEnd())
{
if (reader.isEndElement()) { reader.readNext(); break; }
if (reader.isStartElement())
{
if (reader.name() == "entry")
{
readEntry();
}
else if (reader.name() == "page")
{
readPage();
}
else
{
skipUnknownElement();
}
}
else
{
reader.readNext();
}
}
}
void readPage()
{
QString page = reader.readElementText();
if (reader.isEndElement()) {
reader.readNext();
}
qDebug() << "page:" << page << endl;
}
void skipUnknownElement()
{
reader.readNext();
while (!reader.atEnd()) {
if (reader.isEndElement()) {
reader.readNext();
break;
}
if (reader.isStartElement()) {
skipUnknownElement();
}
else {
reader.readNext();
}
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
readFile("D:\\downPath\\324.xml");
return a.exec();
}