streamparsexml.h
#ifndef STREAMPARSEXML_H
#define STREAMPARSEXML_H
#include <QWidget>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QFile>
#include <QMessageBox>
namespace Ui {
class StreamParseXml;
}
class StreamParseXml : public QWidget
{
Q_OBJECT
public:
explicit StreamParseXml(QWidget *parent = 0);
~StreamParseXml();
public:
int writeXML();
int readXML();
private:
void parseUserInformation();
QString getValue(const QString &name);
QString getAttribute(const QString &name);
private:
QString fileName;
QXmlStreamReader *reader;
private:
Ui::StreamParseXml *ui;
};
#endif // STREAMPARSEXML_H
streamparsexml.cpp
#include "streamparsexml.h"
#include "ui_streamparsexml.h"
#include <QDebug>
#include <QApplication>
StreamParseXml::StreamParseXml(QWidget *parent) :
QWidget(parent),
ui(new Ui::StreamParseXml)
{
ui->setupUi(this);
fileName = qApp->applicationDirPath() + "streamparse.xml";
}
StreamParseXml::~StreamParseXml()
{
delete ui;
}
int StreamParseXml::writeXML()
{
QFile file(fileName);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
writer.writeStartDocument();
writer.writeStartElement("COMMAND");
writer.writeTextElement("OBJECT","USER");
writer.writeTextElement("ACTION","LOGIN");
writer.writeStartElement("DATA");
writer.writeStartElement("USER");
writer.writeAttribute("NAME","root");
writer.writeAttribute("PASSWORD","123456");
writer.writeEndElement();
writer.writeEndElement();
writer.writeEndElement();
file.close();
}
return 0;
}
int StreamParseXml::readXML()
{
if(fileName.isEmpty())
return -2;
QFile *file = new QFile(fileName);
if(!file->open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(NULL,QString("title"),QString("open error!"));
return -1;
}
reader = new QXmlStreamReader(file);
while(!reader->atEnd() && !reader->hasError())
{
QXmlStreamReader::TokenType token = reader->readNext();
if(token == QXmlStreamReader::StartDocument)
{
continue;
}
if(reader->isStartElement() && reader->name() == "OBJECT")
{
QString elementText = reader->readElementText();
if(elementText == "USER")
{
parseUserInformation();
break;
}
}
}
if(reader->hasError())
{
qDebug() << reader->errorString();
}
reader->clear();
delete reader;
reader = NULL;
return 0;
}
void StreamParseXml::parseUserInformation()
{
QString elementString = getValue("ACTION");
if(elementString == "LOGIN")
{
while(!reader->atEnd())
{
reader->readNext();
if(reader->name() == "USER")
{
QXmlStreamAttributes attributes = reader->attributes();
if(attributes.hasAttribute("NAME"))
{
qDebug() << "USER=" << attributes.value("NAME").toString();
}
if(attributes.hasAttribute("PASSWORD"))
{
qDebug() << "PASSWORD=" << attributes.value("PASSWORD").toString();
}
}
}
}
}
QString StreamParseXml::getValue(const QString &name)
{
while(!reader->atEnd())
{
reader->readNext();
if(reader->isStartElement() && reader->name() == name)
{
return reader->readElementText();
}
}
return "";
}
main.cpp
#include "streamparsexml.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StreamParseXml w;
w.writeXML();
w.readXML();
return a.exec();
}
![](https://i-blog.csdnimg.cn/blog_migrate/5078475b067b55c7b1e0a3db462e969d.png)