QDom 练习源码

#include "mainwindow.h"
#include <QDomDocument>
#include <QFile>
#include <QTextStream>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    writexml();
    //readxml();
   // addxml();
    //deletexml();
    modifyxml();
}

MainWindow::~MainWindow()
{

}
void MainWindow::readxml()
{
    QFile file("test.xml");
    if(!file.open(QFile::ReadOnly))
    {
        return;
    }
    QDomDocument doc;
    if(!doc.setContent(&file))//设置test.xml到文档中
    {
        file.close();
        return;
    }
    QDomElement root = doc.documentElement();//返回根节点
    QDomNode first = root.firstChild();//第一个子节点
    while(!first.isNull())//如果节点不空
    {
        if(first.isElement())//如果节点是元素
        {
            QDomElement e = first.toElement();//转换成子元素
            qDebug()<<e.attribute("id");
            QDomNodeList list = e.childNodes();
            for(int i = 0; i < list.size(); ++i)
            {
                QDomNode n = list.at(i);
                if(n.isElement())
                {
                    QDomElement ee = n.toElement();
                    qDebug()<<ee.nodeName()<<ee.toElement().text();
                }
            }
        }
        first = first.nextSibling();
    }

}
void MainWindow::writexml()
{
    QDomDocument doc;
    QDomProcessingInstruction instruct;
    instruct= doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
    doc.appendChild(instruct);
    QDomElement root = doc.createElement("library");
    doc.appendChild(root);
    QDomElement book = doc.createElement("book");
    book.setAttribute("id",1);
    book.setAttribute("time","2013/6/13");

    QDomElement title = doc.createElement("title");
    QDomText text = doc.createTextNode("C++");
    title.appendChild(text);

    book.appendChild(title);

    root.appendChild(book);

    QFile file("test.xml");

     if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))

     return ;

     QTextStream out(&file);

     out.setCodec("UTF-8");

     doc.save(out,4,QDomNode::EncodingFromTextStream);

     file.close();
}
void MainWindow::addxml()
{
    QFile file("test.xml");
    if(!file.open(QFile::ReadOnly))
    {
        return;
    }
    QDomDocument doc;
    if(!doc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();
    QDomElement root = doc.documentElement();
    QDomElement book2 = doc.createElement("book2");
    book2.setAttribute("id",2);
    book2.setAttribute("time","2019.2.1");
    root.appendChild(book2);//增加

    if(!file.open(QFile::WriteOnly|QFile::Truncate))
    {
        return;
    }
    //输出
    QTextStream stream(&file);
    doc.save(stream,4);
    file.close();
}
void MainWindow::deletexml()
{
    QFile file("test.xml");
    if(!file.open(QFile::ReadOnly))
    {
        file.close();
        return;
    }
    QDomDocument doc;
    if(!doc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();

    QDomElement root = doc.documentElement();
    QDomNodeList nodeList = doc.elementsByTagName("book");
    for(int i = 0; i < nodeList.size(); ++i)
    {
        QDomElement e = nodeList.at(i).toElement();
        if(e.attribute("time") == "2019.2.1")
        {
            root.removeChild(nodeList.at(i));//删除
        }
    }
    if(!file.open(QFile::WriteOnly|QFile::Truncate))
    {
        return;
    }
    QTextStream stream(&file);
    doc.save(stream,4);
    file.close();
}
void MainWindow::modifyxml()
{
    QFile file("test.xml");
    if(!file.open(QFile::ReadOnly))
    {
        file.close();
        return;
    }
    QDomDocument doc;
    if(!doc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();

    QDomElement root = doc.documentElement();
    QDomNodeList nodeList = root.elementsByTagName("book");
    QDomNode node = nodeList.at(nodeList.size() - 1).firstChild();
    node.firstChild().setNodeValue("Emma");//修改

    if(!file.open(QFile::WriteOnly|QFile::Truncate))
    {
        return;
    }
    QTextStream stream(&file);
    doc.save(stream,4);
    file.close();
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值