Qt下Dom方式修改xml节点的方法 (简化版)

来源:互联网 发布:网络投资微信群 编辑:程序博客网 时间:2024/06/08 14:29

mainwindow.h文件:

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QDomNode>#include <QMainWindow>namespace Ui {    class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();    bool openXmlFile(QString FilePath);    bool changeSave();private:    Ui::MainWindow *ui;    QDomDocument m_doc;};#endif // MAINWINDOW_H

mainwindow.cpp文件:

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QFile>#include <QDebug>MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);     changeSave();}MainWindow::~MainWindow(){    delete ui;}bool MainWindow::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 MainWindow::changeSave(){    if(!openXmlFile("/root/a.xml"))        {            return false;        }        //修改保存xml    QDomElement root = m_doc.documentElement();       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();     //标签之间的内容作为节点的子节点出现,得到原来的子节点                                       node.firstChild().setNodeValue("love");   //用提供的value值来设置子节点的内容                                       qDebug()<<"after change,the value is"<<node.toElement().text();                                  //     QDomNode newnode = node.firstChild();     //值修改过后                                  //     node.replaceChild(newnode,oldnode);      //调用节点的replaceChild方法实现修改功能                                   }                                   if( node.nodeName() == "email" )                                   {                                   //    QDomNode oldnode = node.firstChild();                                       node.firstChild().setNodeValue("sex");                                   //    QDomNode newnode = node.firstChild();                                   //    node.replaceChild(newnode,oldnode);                                   }                               }                           }                       }                   }           n = n.nextSibling();             }             QFile filexml("/root/a.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);                    m_doc.save(ts,4);                    filexml.close();                    return true;}

xml文件,修改前:

<?xml version='1.0' encoding='UTF-8'?><kdevelop>    <general>        <author>asdf</author>        <email>zxcv</email>    </general></kdevelop>

xml文件,修改后:

<?xml version='1.0' encoding='UTF-8'?><kdevelop>    <general>        <author>love</author>        <email>sex</email>    </general></kdevelop>



原创粉丝点击