domparsexml.h
#ifndef DOMPARSEXML_H
#define DOMPARSEXML_H
#include <QWidget>
#include <QDomDocument>
#include <QFile>
#include <QTextStream>
namespace Ui {
class DomParseXML;
}
class DomParseXML : public QWidget
{
Q_OBJECT
public:
explicit DomParseXML(QWidget *parent = 0);
~DomParseXML();
public:
int writeXML();
int readXML();
private:
QString fileName;
private:
Ui::DomParseXML *ui;
};
#endif // DOMPARSEXML_H
domparsexml.cpp
#include "domparsexml.h"
#include "ui_domparsexml.h"
#include <QApplication>
#include <QMessageBox>
#include <QDebug>
DomParseXML::DomParseXML(QWidget *parent) :
QWidget(parent),
ui(new Ui::DomParseXML)
{
ui->setupUi(this);
fileName = qApp->applicationDirPath() + "domparse.xml";
}
DomParseXML::~DomParseXML()
{
delete ui;
}
int DomParseXML::writeXML()
{
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
QMessageBox::information(NULL,"title","open error!");
return -2;
}
QTextStream out(&file);
QDomDocument doc;
QDomText text;
QDomElement element;
QDomAttr attr;
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml","version = \'1.0\' encoding=\'UTF-8\'");
doc.appendChild(instruction);
QDomElement root = doc.createElement("COMMAND");
doc.appendChild(root);
element = doc.createElement("OBJECT");
text = doc.createTextNode("USER");
element.appendChild(text);
root.appendChild(element);
element = doc.createElement("ACTION");
text = doc.createTextNode("LOGIN");
element.appendChild(text);
root.appendChild(element);
element = doc.createElement("DATA");
root.appendChild(element);
QDomElement userElement = doc.createElement("USER");
attr = doc.createAttribute("NAME");
attr.setValue("root");
userElement.setAttributeNode(attr);
attr = doc.createAttribute("PASSWORD");
attr.setValue("123456");
userElement.setAttributeNode(attr);
element.appendChild(userElement);
doc.save(out,4);
return 0;
}
int DomParseXML::readXML()
{
QDomDocument doc;
QFile file(fileName);
QString error = "";
int row = 0,column = 0;
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << "open error!";
return -2;
}
if(!doc.setContent(&file,false,&error,&row,&column))
{
qDebug() << "parse file failed:" << row << "---" << column <<":" <<error;
file.close();
return -1;
}
file.close();
QDomElement root = doc.documentElement();
QDomNode node = root.firstChild();
while(!node.isNull())
{
QDomElement element = node.toElement();
if(!element.isNull())
{
qDebug() << element.tagName() << ":" << element.text();
QDomNode nodeson = element.firstChild();
while(!nodeson.isNull())
{
QDomElement elementson = nodeson.toElement();
if(!elementson.isNull())
{
qDebug()<< "---" <<elementson.tagName();
if(elementson.hasAttribute("NAME"))
{
qDebug()<< "---" << "NAME=" << elementson.attributeNode("NAME").value();
}
if(elementson.hasAttribute("PASSWORD"))
{
qDebug()<< "---" << "PASSWORD=" << elementson.attributeNode("PASSWORD").value();
}
}
nodeson = nodeson.nextSibling();
}
}
node = node.nextSibling();
}
return 0;
}
main.cpp
#include "domparsexml.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DomParseXML w;
w.writeXML();
w.readXML();
return a.exec();
}