新闻中心

Qt框架怎么读写XML文件_Qt框架QXmlStreamReader/Writer使用教程

2025-11-06
浏览次数:
返回列表
Qt推荐使用QXmlStreamReader和QXmlStreamWriter处理XML文件。1. QXmlStreamReader以流式方式逐节点解析,内存占用低,适合大文件;通过readNext()读取token,结合isStartElement()、isEndElement()等判断节点类型,可灵活提取数据。2. QXmlStreamWriter提供writeStartElement()、writeAttribute()等方法生成格式化XML,调用setAutoFormatting(true)提升可读性,自动处理编码与转义。3. 使用时需检查文件打开状态,读取后验证hasError(),写入注意层级匹配;相比DOM方式更高效省资源,适用于复杂或大型XML场景。

qt框架怎么读写xml文件_qt框架qxmlstreamreader/writer使用教程

Qt 框架提供了多种方式读写 XML 文件,其中 QXmlStreamReaderQXmlStreamWriter 是最常用且推荐的方式。它们基于流式处理,内存占用低、效率高,适合处理大文件或结构复杂的 XML 数据。

1. 使用 QXmlStreamReader 读取 XML 文件

QXmlStreamReader 以逐节点的方式解析 XML,支持跳过未知内容,适用于灵活的解析场景。

基本使用步骤:

  • 创建 QFile 并打开 XML 文件
  • 将文件传入 QXmlStreamReader
  • 循环读取 token(标签、文本、属性等)
  • 根据 token 类型进行相应处理
示例代码:读取一个简单的配置文件
#include <QFile>
#include <QXmlStreamReader>
#include <iostream>

void readXml(const QString &fileName)
{
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly))
        return;

    QXmlStreamReader reader(&file);
    while (!reader.atEnd()) {
        reader.readNext();

        if (reader.isStartElement()) {
            if (reader.name() == "setting") {
                QXmlStreamAttributes attrs = reader.attributes();
                if (attrs.hasAttribute("name") && attrs.hasAttribute("value")) {
                    std::cout << "Name: " 
                              << attrs.value("name").toString().toStdString()
                              << ", Value: "
                              << attrs.value("value").toString().toStdString()
                              << std::endl;
                }
            }
        }
    }

    if (reader.hasError()) {
        std::cerr << "Error: " << reader.errorString().toStdString().c_str();
    }

    file.close();
}

常见判断方法:

  • isStartElement():是否是开始标签
  • isEndElement():是否是结束标签
  • isCharacters():是否是文本内容(注意过滤空白)
  • isComment():是否是注释

2. 使用 QXmlStreamWriter 写入 XML 文件

QXmlStreamWriter 提供简洁 API 来生成格式良好的 XML 文件,自动处理转义和编码。

刺鸟创客 刺鸟创客

一款专业高效稳定的AI内容创作平台

刺鸟创客 110 查看详情 刺鸟创客

基本流程:

  • 打开 QFile 或其他 QIODevice
  • 创建 QXmlStreamWriter 实例
  • 设置输出选项(如自动换行)
  • 使用 writeStartElement、writeAttribute、writeCharacters 等写入内容
示例代码:生成一个 settings.xml
#include <QFile>
#include <QXmlStreamWriter>

void writeXml(const QString &fileName)
{
    QFile file(fileName);
    if (!file.open(QIODevice::WriteOnly))
        return;

    QXmlStreamWriter writer(&file);
    writer.setAutoFormatting(true); // 启用格式化输出
    writer.writeStartDocument();
    writer.writeStartElement("config");
    
    writer.writeStartElement("setting");
    writer.writeAttribute("name", "volume");
    writer.writeAttribute("value", "80");
    writer.writeEndElement(); // setting

    writer.writeStartElement("setting");
    writer.writeAttribute("name", "fullscreen");
    writer.writeAttribute("value", "true");
    writer.writeEndElement(); // setting

    writer.writeEndElement(); // config
    writer.writeEndDocument();

    file.close();
}

关键方法说明:

  • writeStartDocument():写入 XML 声明(如
  • writeStartElement(tag):开始一个标签
  • writeAttribute(name, value):添加属性
  • writeCharacters(text):写入标签内的文本
  • writeEndElement():关闭当前标签
  • writeEndDocument():完成文档

3. 注意事项与技巧

使用这两个类时需要注意以下几点:

  • 始终检查文件是否成功打开
  • 读取时建议用 !reader.atEnd() 控制循环,避免无限循环
  • 写入时开启 setAutoFormatting(true) 可提高可读性
  • QXmlStreamReader 不会报错所有异常,需调用 hasError() 明确判断
  • 中文等非 ASCII 字符在 QFile 中默认使用 UTF-8,无需额外设置编码

对于嵌套结构,可以结合栈或状态变量跟踪层级;对于大型文件,流式处理比 DOM 方式(如 QDomDocument)更节省内存。

基本上就这些。掌握 QXmlStreamReader 和 QXmlStreamWriter 后,就能高效处理大多数 XML 场景了。

以上就是Qt框架怎么读写XML文件_Qt框架QXmlStreamReader/Writer使用教程的详细内容,更多请关注其它相关文章!


# 非标准  # 做网站建设年费  # 惠州谷歌营销推广招聘信息  # 网络推广人脉营销专员  # 电商项目怎样做seo  # 推广属于网络营销吗知乎  # 专业格泰网站建设  # 养发护发营销推广文案  # 荞麦产品营销推广方案  # 优化网站排名哪家强  # 红人营销推广邮件  # 推荐使用  # 就能  # 大文件  # qt框架  # 时需  # 自定义  # 流式  # 适用于  # 报错  # 内存占用  # 格式化输出  # 配置文件  # stream  # ios  #   # 编码  # xml文件 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  Django表单验证失败时保留用户输入数据的最佳实践  海量存储:机器视觉智能化的核心基石  qq游戏网页版直接玩_qq游戏免下载快速入口  XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法  PHP 枚举:根据字符串获取枚举案例的策略与实现  msn官网入口地址手机版 msn官方网站手机最新链接  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法  微信网页版登录教程_微信网页版登录入口在哪  J*aScript动态修改指定div内所有a标签样式指南  印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】  Mac终端命令大全_Mac常用Terminal指令速查  html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】  没有大陆身份证/银行卡如何实名微信? 亲测有效的几种方法分享  千牛数据看板网页版_千牛数据看板网页版访问方法  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  React Router 嵌套组件中 URL 重定向问题的解决方案  Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择  谷歌学术网站直达地址 谷歌学术搜索网页版一键进入  Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问  最新韩小圈网页版登录入口_官网在线观看官方链接  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  qq游戏免费畅玩入口_qq游戏电脑版快速启动  Mac怎么锁定备忘录_Mac备忘录加密设置教程  在J*a中如何使用Exception包装底层异常_异常包装与信息传递方法说明  包子漫画官方网站阅读入口-包子漫画在线漫画官网直达链接  AI抖音网页版免费视频入口 AI抖音网页端最新视频实时观看  小红书网页版入口链接分享 小红书官网直接进  Python getattr() 异常处理深度解析:避免程序意外退出  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制  百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案  一加 14R 快充无反应_一加 14R 充电优化  Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换  AO3最新镜像入口 Archive of Our Own官方平台访问  葱吃多了会怎样 葱吃多了会伤胃吗  小米Civi 4录制视频过暗_小米Civi 4亮度优化  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  Go语言中JSON数据解码与字段访问指南  淘宝支付提示失败如何解决 淘宝支付流程优化方法  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  CSS Box Model与弹性按钮:维持布局稳定的动画实践  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  微信商城在哪里打开【步骤】 

搜索