QDomElement遍历节点

#include <QtGui/QApplication>

#include "mainwindow.h"

#include <QDialog>

#include <QFile>

#include <QDebug>

#include <QDomDocument>

#include <QFile>

QDomDocument m_doc;

bool  changeSave();

bool openXmlFile(QString FilePath);

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    MainWindow w;

    w.show();

    changeSave();

    return a.exec();

}

bool openXmlFile(QString FilePath)

{

    QFile file( FilePath );

    if( !file.open( QFile::ReadOnly | QFile::Text  ) )

    {

        qDebug() << QObject::tr("error::ParserXML->OpenXmlFile->file.open->%s\n") << FilePath;


        return false;

    }


    if( !m_doc.setContent( &file ) )

    {

        qDebug() << QObject::tr("error::ParserXML->OpenXmlFile->doc.setContent\n") << FilePath;


        file.close();

        return false;

    }

    file.close();

    return true;

}

bool  changeSave()

{


    if(!openXmlFile("I:/q.xml"))

    {

        return false;

    }

    //修改保存xml

  //document表示对应文档

  //documentElement取根节点

    QDomElement root = m_doc.documentElement();        //document表示对应文档

    if(root.tagName()!= "kdevelop")

        return false;

    QDomNode n = root.firstChild();

    while ( !n.isNull() )

    {

        //对根节点可以取得其对应的子节点

        QDomElement e = n.toElement();

        if( !e.isNull())

        {

            if( e.nodeName() == "general" )

            {

                QDomNodeList list = e.childNodes(); //获得元素e的所有子节点的列表

                for(int a=0; a<list.count(); a++) //遍历该列表

                {

                    QDomNode node = list.at(a);

                    if(node.isElement())

                    {

                        if( node.nodeName() == "author" )

                        {

                            //标签之间的内容作为节点的子节点出现,得到原来的子节点

                            QDomNode oldnode = node.firstChild();   

                            //用提供的value值来设置子节点的内容

                            node.firstChild().setNodeValue("csdn");   

                            //值修改过后

                            QDomNode newnode = node.firstChild();    

                            //调用节点的replaceChild方法实现修改功能

                            node.replaceChild(newnode,oldnode);      

                        }

                        if( node.nodeName() == "email" )

                        {

                            QDomNode oldnode = node.firstChild(); 

                            node.firstChild().setNodeValue("test@tom.com");

                            QDomNode newnode = node.firstChild();

                            node.replaceChild(newnode,oldnode);

                        }

                    }

                }

            }     

        }

        n = n.nextSibling();

    }

    QFile filexml("I:/q.xml");

    if( !filexml.open( QFile::WriteOnly | QFile::Truncate) ){

        qWarning("error::ParserXML->writeOperateXml->file.open\n");

        return false;

    }

    QTextStream ts(&filexml);

    ts.reset();

    ts.setCodec("utf-8");

    m_doc.save(ts, 4, QDomNode::EncodingFromTextStream);

    filexml.close();

    return true;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。