Qt 读写xml文件

来源:互联网 发布:域名商 编辑:程序博客网 时间:2024/05/21 22:48

//xml文件


<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <item attr1="0" attr2="1"/>
    <itemList>
        <item1>0</item1>
        <item2>1</item2>
    </itemList>
</Root>

//qt代码


//QtReadWriteXML.h 头文件

#ifndef QT_READWRITEXML_H
#define QT_READWRITEXML_H

#include <QtGui>

class Qt_readWriteXML : public QWidget
{
    Q_OBJECT

public:
    Qt_readWriteXML(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~Qt_readWriteXML();
private slots:
    void readXml();
    void writeXml();
};

#endif


//QtReadWriteXML.cpp原文件

#include "qt_readwritexml.h"
#include <QFile>
#include <QDomDocument>
#include <QXmlStreamWriter>

Qt_readWriteXML::Qt_readWriteXML(QWidget *parent, Qt::WFlags flags): QWidget(parent, flags)
{
    QVBoxLayout *lay=new QVBoxLayout();
    setLayout(lay);

    QPushButton *b1=new QPushButton("write");
    QPushButton *b2=new QPushButton("read");
    lay->addWidget(b1);
    lay->addWidget(b2);
    connect(b1,SIGNAL(clicked()),this,SLOT(writeXml()));
    connect(b2,SIGNAL(clicked()),this,SLOT(readXml()));
}

Qt_readWriteXML::~Qt_readWriteXML()
{

}


//读xml文件
void Qt_readWriteXML::readXml()
{
    QString filePath="e:/test.xml";
    QFile file(filePath);
    if (file.open(QFile::ReadOnly|QFile::Text))
    {
        QDomDocument dom;
        if (dom.setContent(&file))
        {
            QDomElement rootDom=dom.documentElement();
            if (rootDom.tagName()=="Root")
            {
                QDomNode subNode=rootDom.firstChild();
                while(!subNode.isNull())
                {
                    QDomElement subElement=subNode.toElement();
                    if (subElement.tagName()=="item")
                    {
                        for (int i=0;i<subElement.attributes().count();i++)
                        {
                            qDebug()<<subElement.attributes().item(i).nodeName();//attr1,attr2
                            qDebug()<<subElement.attributes().item(i).nodeValue().toInt();//0,1
                        }
                    }
                    else if (subElement.tagName()=="itemList")
                    {
                        QDomNode childNode=subElement.firstChild();
                        while(!childNode.isNull())
                        {
                            qDebug()<<childNode.toElement().nodeName();//item1,item2
                            qDebug()<<childNode.toElement().text();//0,1
                            childNode=childNode.nextSibling();
                        }
                    }
                    subNode=subNode.nextSibling();
                }
            }
        }
        file.close();
    }
}

//写xml文件
void Qt_readWriteXML::writeXml()
{
    QString filePath="e:/test.xml";
    QFile file(filePath);
    if (file.open(QFile::WriteOnly|QFile::Text))
    {
        QXmlStreamWriter xmlWriter(&file);
        xmlWriter.setAutoFormatting(true);
        xmlWriter.writeStartDocument();
        xmlWriter.writeStartElement("Root");

        xmlWriter.writeStartElement("item");
        xmlWriter.writeAttribute("attr1", "0");
        xmlWriter.writeAttribute("attr2", "1");
        xmlWriter.writeEndElement();

        xmlWriter.writeStartElement("itemList");
        xmlWriter.writeTextElement("item1","0");
        xmlWriter.writeTextElement("item2","1");
        xmlWriter.writeEndElement();

        xmlWriter.writeEndElement();
        xmlWriter.writeEndDocument();
        file.close();
    }
}

0 0
原创粉丝点击