QT学习(XML读写)

QT学习(XML)

XML的读写

XML和HTML区别:

XML: 可扩展标记语言
HTML:超文本标记语言

语法:
单标记
<标签名 属性名 = “属性值”/>

双标记
     <标签名 属性名 = "属性值">
     ....
     <标签名/>

HTML和XML区别:
1、xml标签和属性可自定义可扩展
html标签和属性不可以定义
2、xml注重在数据的本身作为数据承载一个标签的定义就是为了承载一个数据
html注重的是数据的显示方式 一个标签的使用为了页面的结构化和需求

XML读写的QT代码:

***.pro添加

QT       += core gui xml

添加的头文件:

#include <QtXml>
#include<QFileDialog>

创建按钮writeBtn、readBtn;文本编辑器textEdit

(读取的TextRead.xml可以是自己提前写好或者利用本代码写)

按钮事件触发写入和读取:

//xml写入逻辑参考
void Widget::on_writeBtn_clicked()
{


    QDomDocument doc;
    QDomElement root = doc.createElement("root"); //文档对象创建一个标签

    doc.appendChild(root);//root标签添加到文档对象

    auto hero = doc.createElement("Hero");
    root.appendChild(hero);

    //为标签添加属性
    hero.setAttribute("id" , "10086");
    auto name = doc.createElement("Name");
    auto desc = doc.createElement("Desc");
    hero.appendChild(name);
    hero.appendChild(desc);

    name.appendChild(doc.createTextNode("阿珂"));
    desc.appendChild(doc.createTextNode("刺客"));


    QString fileNmae = QFileDialog::getSaveFileName(this,"保存xml");

    QFile file(fileNmae);//文件对象
    if(!file.open(QIODevice::WriteOnly))
    {
        return;
    }

    //保存文件
    QTextStream outStream(&file);//使用文件对象 创建文本流对象
    doc.save(outStream,4);


}
//读取测试
void Widget::on_readBtn_clicked()
{

    QFile file("./TextRead.xml");//要读取的xml文件位置
    if(!file.open(QIODevice::ReadOnly))
    {
        return;
    }

    QVector<Hero> vec;//数据承载容器

    //进行xml数据解析
    QDomDocument doc;
    doc.setContent(&file);//设置xml文档内容为文件对象

    auto root = doc.firstChildElement("root");//查找第一个子标签root
    auto hero = root.firstChildElement("Hero");//从root标签找到第一个子标签Hero

    while(!hero.isNull())
    {
        //进行标签解析
        Hero heroInfo;
        heroInfo.id = hero.attribute("id").toInt();
        heroInfo.name = hero.firstChildElement("Name").text();
        heroInfo.desc = hero.firstChildElement("Desc").text();

         vec.append(heroInfo);

         hero = hero.nextSiblingElement("Hero");//读取下一个标签
    }

    //显示到UI
    QString contents = "";
    for(Hero info : vec)
    {
        contents += "ID:" + QString::number(info.id);
        contents += " Name:" + info.name;
        contents += " Desc:" + info.desc;
        contents += "\n--------------------------------\n";

    }
    ui->textEdit->setText(contents);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值