QXmlStreamReader和QXmlStreamWriter实现将一个xml文件读取后保存为另一个xml

简介: QXmlStreamReader和QXmlStreamWriter实现将一个xml文件读取后保存为另一个xml

QXmlStreamReader 类

是一个xml解析器,用于读取xml文件,相对的是QXmlStreamWriter类,是用于写入xml文件是一个快速的解析器,可以通过流api实现读取规范格式的xml文件;qt也有另一种解析器。QXmlSimpleReader。但是相比较,QXmlStreamReader和QXmlStreamWriter更高效,更简单。在使用见 QDomDocument的的应用程序中,更方便使用。

当读取器报告开始元素时,属性由attributes() 中的QXmlStreamReader返回。该类还可以与QXmlStreamWriter 一起用作writeAttributes()的参数。便利函数value () 遍历向量并返回给定 namespaceUri 的属性值和属性名称。可以使用append ()添加新属性。


保存新的xml文件

遍历旧的xml文件,按照格式输出的新的xml文件

void SaveNewFile(QString srcFileName,QString tarFileName){
//*QFile类QT的文件的输入输出设备类。用来读写二进制文件与文本文件的输入输出设备。
    QFile srcFile(srcFileName);
    srcFile.open(QFile::ReadOnly | QFile::Text);
    QFile tarFile(tarFileName);
    tarFile.open(QFile::WriteOnly | QFile::Text | QIODevice::Truncate);
    //创建QXmlStreamReader
    QXmlStreamReader reader(&srcFile);
    QXmlStreamWriter writer(&tarFile);
    writer.setAutoFormatting(true);
    //;//自动设置格式,这样会自动换行和添加缩进
    writer.writeStartDocument();//写入开始记号
   while (!reader.atEnd())
    {
        reader.readNext();
##
        if(reader.isStartElement())
        //测试当前内容节点是否是开始标记。
        {
            QXmlStreamAttributes attr = reader.attributes();
            qDebug()<<reader.name().toString();
            writer.writeStartElement(reader.name().toString());
            if(attr.size()>0)
            {
                writer.writeAttributes(attr);
            }
        }
        if(reader.isCharacters())
        {
            //qDebug()<<reader.text().toString();
            writer.writeCharacters(reader.text().toString());
        }
        if(reader.isEndElement())
        {
            writer.writeEndElement();
        }
    }
    writer.writeEndDocument();
    //对应于writeStartDocument(),当调用这个函数时,即表示文档信息写入完毕。 
    srcFile.close();
    tarFile.close();
}
void MainWindow::on_pushButton_2_clicked()
{
    SaveNewFile("MapConfig.xml","testsave.xml");
}



相关文章
|
存储 关系型数据库 MySQL
|
7月前
|
API 数据库 开发者
免费的批量标签制作软件,这几款值得一试
如果你所在团队需要在有限预算下实现批量标签制作、打印和二维码管理,可以优先选择草料二维码(仅需二维码标签的场景)。对于信息化程度较高或有定制需求的企业,也可考虑 BarTender 等商业软件。电商/仓储等需要频繁打印的用户,可以考虑精臣打印机+云打印软件的行驶时,成本更可控
免费的批量标签制作软件,这几款值得一试
|
11月前
|
存储 NoSQL 固态存储
阿里云服务器云盘选择参考,ESSD Entry云盘和Entry云盘区别
在我们选择阿里云服务器系统盘和数据盘的时候,有部分云服务器同时支持ESSD Entry云盘和ESSD云盘,对于部分初次接触阿里云服务器的用户来说,可能并不是很清楚他们之间的区别,因此不知道选择哪种更好更能满足自己场景的需求,本文为大家介绍一下阿里云服务器ESSD Entry云盘和ESSD云盘的区别及选择参考。
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明
397 0
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
564 1
|
Windows
win11出现:终止代码:SYSTEM SERVICE EXCEPTION解决方案实列(不懂请私信up主)
终止代码解释:SYSTEM_SERVICE_EXCEPTION,又称为异常处理程序,是一种常见的蓝屏错误码,代表Windows系统检测到内核代码发生错误,无法响应某些系统服务,而且无法继续运行。它特别容易发生在许多设备驱动程序中,如显示驱动程序和音频驱动程序,因为他们成为Windows系统的必要组成部分。
2833 0
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
527 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
jenkins 持续交付 开发工具
通过jenkins构建一个多分支的Pipeline项目
通过jenkins构建一个多分支的Pipeline项目
|
Windows
Qt实现telnet服务【记录】
Qt实现telnet服务【记录】
647 0
|
前端开发 图形学 UED
深度解析Qt背景设计:从基础到高级,从Widget到Quick(一)
深度解析Qt背景设计:从基础到高级,从Widget到Quick
1268 0