使用Qt创建XML文档及XML文档的增删改

使用Qt创建XML文档及XML文档的增删改

XML文档的操作 :QXml + QFile+QTextStream

创建XML的一般步骤:

1、添加处理指令及XML说明

2、添加元素

3、写入文件

示例:

QDomDocument doc;

// 添加处理指令即XML说明
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml",
                                              "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);

// 添加根元素
QDomElement root = doc.createElement(QString("书库"));
doc.appendChild(root);

// 添加第一个图书元素及其子元素
QDomElement book = doc.createElement(QString("图书"));
QDomAttr id = doc.createAttribute(QString("编号"));
QDomElement title = doc.createElement(QString("书名"));
QDomElement author = doc.createElement(QString("作者"));
QDomText text;

id.setValue(QString("1"));
book.setAttributeNode(id);
text = doc.createTextNode(QString("Qt"));
title.appendChild(text);
text = doc.createTextNode(QString("shiming"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);

// 添加第二个图书元素及其子元素
book = doc.createElement(QString("图书"));
id = doc.createAttribute(QString("编号"));
title = doc.createElement(QString("书名"));
author = doc.createElement(QString("作者"));

id.setValue(QString("2"));
book.setAttributeNode(id);
text = doc.createTextNode(QString("Linux"));
title.appendChild(text);
text = doc.createTextNode(QString("yafei"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);

QFile file("my.xml");
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return ;
QTextStream out(&file);
// 将文档保存到文件,4为子元素缩进字符数
doc.save(out, 4);
file.close();

细节:

  • 1、QDOMDocument类在内存中生成一颗DOM树。
  • 2、createElement()添加元素 createAttribute()添加属性 createTextNode()添加文本
    通过这些个函数来生成各种节点
  • 3、使用appendChild()将各个节点依次追加

XML 文档的操作(添加、查找、更新、删除)

添加的一般步骤

1、打开文件
2、QDomDocument 类来创建DOM树
3、关闭文件
4、找到最后一个孩子节点的元素
5、新增元素,在最后一个孩子节点后追加一个新元素

示例代码:

 QFile file("my.xml");
    if (!file.open(QIODevice::ReadOnly)) return;
    QDomDocument doc;
    if (!doc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();
    QDomElement root = doc.documentElement();

    QDomElement book = doc.createElement(QString("图书"));
    QDomAttr id = doc.createAttribute(QString("编号"));
    QDomElement title = doc.createElement(QString("书名"));
    QDomElement author = doc.createElement(QString("作者"));
    QDomText text;

    // 我们获得了最后一个孩子结点的编号,然后加1,便是新的编号
    QString num = root.lastChild().toElement().attribute(QString("编号"));
    int count = num.toInt() +1;
    id.setValue(QString::number(count));

    book.setAttributeNode(id);
    text = doc.createTextNode(ui->lineEdit_2->text());
    title.appendChild(text);
    text = doc.createTextNode(ui->lineEdit_3->text());
    author.appendChild(text);
    book.appendChild(title);
    book.appendChild(author);
    root.appendChild(book);

    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return ;
    QTextStream out(&file);
    doc.save(out, 4);
    file.close();

查找、更新、删除的一般操作

1、elementByTagName()来获取所有图书元素的列表
2、使用指定的id编号来获取要操作的图书元素
3、删除:removeChild()函数来删除该元素并保存到文件。
4、更新:setNodeValue()来为其设置新的值并保存到文件
3、查找:将该元素的内容显示出来。

 // 先清空显示
ui->listWidget->clear();
QFile file("my.xml");
if (!file.open(QIODevice::ReadOnly)) return ;
QDomDocument doc;
if (!doc.setContent(&file))
{
    file.close();
    return ;
}
file.close();

QDomElement docElem = doc.documentElement();

QDomNode n = docElem.firstChild();
while(!n.isNull())
{
    if (n.isElement())
    {
        QDomElement e = n.toElement();
        ui->listWidget->addItem(e.tagName() + e.attribute(QString("编号")));
        QDomNodeList list = e.childNodes();
        for(int i=0; i<list.count(); i++)
        {
            QDomNode node = list.at(i);
            if(node.isElement())
                ui->listWidget->addItem("   " + node.toElement().tagName()
                                        + " : " + node.toElement().text());
        }
    }
    n = n.nextSibling();
}
 

界面效果:

在这里插入图片描述

总结:

1、本篇的参考来源《Qt Creator 快速入门》
2、XML的操作,理解上并不复杂,操作上基本上按照流程来执行,但熟练掌握还需要勤加练习才好

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值