QT使用xml流QXmlStreamReader快速读取与QXmlStreamWriter写入xml文件

QT使用xml流读取与写入xml文件

QXmlStreamReader解析xml文档,快速读取比SAX读取更快更方便。

SAX读取参考:

QT使用SAX读取xml高效-快速_txwtech的博客-CSDN博客SAX(Simple API for XML)如果你只想读取并显示整个XML文档,那么SAX是很好的选择,因为它提供了比DOM更简单的接口,并且它不需要将整个XML文档一次性读入内存,这样便可以用来读取较大的文件SAX只能读取,不能写入......https://txwtech.blog.csdn.net/article/details/126324844?spm=1001.2014.3001.5502

QXmlStreamWriter,只能写入,创建新的xml文件

不能添加,修改,删除某一元素操作。

如果需要实现增删改查操作:

参考DOM:

QT_DOM方式操作xml文件增删改查_txwtech的博客-CSDN博客DOM是Document ObjectModel的简写,即XML文档对象模型,是由W3C提出的一种处理XML文档的标准接口。DOM 可以一次性读入整个XML文档,在内存中构造为一棵树(DOM树)将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些。能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接将这颗树保存为硬盘上的一个 XML 文件。......https://txwtech.blog.csdn.net/article/details/126321336?spm=1001.2014.3001.5502

 

#include <QCoreApplication>
#include <QFile>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("my2.xml");//../xx/my2.xml
    if(!file.open(QIODevice::ReadOnly|QFile::Text)) //在读取时,将行结束符转换成 \n;在写入时,
       // 将行结束符转换成本地格式,例如 Win32 平台
       // 上是 \r\n
    {
        qDebug()<<"无法打开文件";
        return 1;
    }
    //读取xml
    QXmlStreamReader reader;
    //设置文件,将流设置为初始状态
    reader.setDevice(&file);
    //如果没有读到文档结尾,并且没有出现错误
    while(!reader.atEnd())
    {
        //读取下一个记号,它返回记号的类型
        QXmlStreamReader::TokenType type=reader.readNext();
        //根据记号的类型来进行不同的输出
        if(type ==QXmlStreamReader::StartDocument)
            qDebug()<<reader.documentEncoding()<<reader.documentVersion();
        if(type==QXmlStreamReader::StartElement)
        {
            qDebug()<<"<"<<reader.name()<<">";
            if(reader.attributes().hasAttribute("编号"))
                qDebug()<<reader.attributes().value("编号");
        }
        if(type==QXmlStreamReader::EndElement)
            qDebug()<<"</"<<reader.name()<<">";
        if(type==QXmlStreamReader::Characters &&!reader.isWhitespace())
            qDebug()<<reader.text();
    }
    //读取过程中出现错误,就输出错误信息
    if(reader.hasError())
    {
        qDebug()<<"错误信息:"<<reader.errorString();
    }
    file.close();

    //写入my3.xml
    QFile file2("my3.xml");//../xx/my2.xml
    if(!file2.open(QIODevice::WriteOnly|QFile::Text)) //在读取时,将行结束符转换成 \n;在写入时,
       // 将行结束符转换成本地格式,例如 Win32 平台
       // 上是 \r\n
    {
        qDebug()<<"无法打开文件";
        return 1;
    }
    QXmlStreamWriter stream(&file2);
    stream.setAutoFormatting(true);
    stream.writeStartDocument();
    stream.writeStartElement("book_mak");
    stream.writeAttribute("href","https://blog.csdn.net/txwtech");
    stream.writeTextElement("书名","博客首页");
    stream.writeEndElement();
    stream.writeEndDocument();
    file2.close();
    qDebug()<<"写入完成";


    return a.exec();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

txwtech笛克特科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值