0

0

Qt怎么读写XML文件 QXmlStreamReader使用教程

星降

星降

发布时间:2026-01-18 08:07:02

|

487人浏览过

|

来源于php中文网

原创

推荐使用QXmlStreamReader和QXmlStreamWriter处理XML文件,二者为轻量级流式解析/生成器,支持逐标记读取、自动转义与标签配对,需手动处理空白、属性校验及文档起止,UTF-8编码开箱即用。

qt怎么读写xml文件 qxmlstreamreader使用教程

Qt 读写 XML 文件推荐用 QXmlStreamReader(读)和 QXmlStreamWriter(写),它们是 Qt 提供的基于事件流的轻量级、高效、内存友好的 XML 处理类,特别适合解析结构清晰或大型 XML 文件,不依赖 DOM 树,避免一次性加载全部内容到内存。

用 QXmlStreamReader 解析 XML 文件

它按“逐个标记(token)”方式顺序读取,类似 SAX 解析器。你需要自己判断当前读到的是开始标签、结束标签、文本内容还是注释等,并做相应处理。

  • 先创建 QFile 打开 XML 文件,再用该文件构造 QXmlStreamReader
  • readNext() 移动到下一个标记,再通过 tokenType() 判断类型(如 StartElementCharactersEndElement
  • 遇到 StartElement 可用 name() 获取标签名,attributes() 获取属性键值对
  • 遇到 Characters 时,用 text().toString().trimmed() 提取有效文本(注意过滤空白)
  • 建议配合 while 循环 + switch 判断 token 类型,结构清晰不易漏处理

常见解析逻辑示例(如读取 C++ Primer

你可以这样组织代码逻辑:

Khroma
Khroma

AI调色盘生成工具

下载
  • 读到 StartElement 且 name()=="book" → 记录其 id 属性值
  • 接着读到 StartElement 且 name()=="title" → 设一个标志位(如 inTitle = true
  • 下一次读到 CharactersinTitle 为真 → 保存文本内容
  • 读到 EndElement 且 name()=="title" → 清除标志位
  • 读到 EndElement 且 name()=="book" → 完成一条数据,存入容器或处理

用 QXmlStreamWriter 写入 XML 文件

它提供简洁的流式写接口,自动处理缩进(需手动设置)、转义、标签配对等细节。

  • setDevice() 绑定 QFileQByteArray
  • 调用 writeStartDocument() 开始,writeEndDocument() 结束
  • writeStartElement("tag") 写开始标签,writeAttribute("key", "value") 写属性
  • writeCharacters("text") 写文本内容,writeEndElement() 写结束标签
  • 如需格式化输出,可调用 setAutoFormatting(true)setAutoFormattingIndent(2)

注意事项与避坑点

实际使用中容易忽略但关键的细节:

  • QXmlStreamReader 不会自动跳过空白或换行,Characters 可能返回空字符串或换行符,务必用 trimmed() 判断是否为空
  • 读取属性前,确认当前 token 是 StartElement,否则 attributes() 返回空
  • 写 XML 时,如果没调用 writeEndDocument(),可能缺少结尾换行或格式异常
  • 中文内容无需额外编码设置 —— Qt 默认使用 UTF-8,只要源文件和 QFile 都是 UTF-8 编码即可正常读写
  • 若 XML 嵌套深或结构复杂,建议封装成小函数按元素粒度解析(如 parseBook()、parseAuthor()),提升可读性和复用性

相关专题

更多
视频后缀名都有哪些
视频后缀名都有哪些

视频后缀名都有avi、mpg、mpeg、rm、rmvb、flv、wmv、mov、mkv、ASF、M1V、M2V、MPE、QT、VOB、RA、RMJ、RMS、RAM、等等。更多关于视频后缀名的相关知识,详情请看本专题下面的文章,php中文网欢迎大家前来学习。

3457

2023.10.31

C++ Qt图形开发
C++ Qt图形开发

本专题专注于 C++ Qt框架在图形界面开发中的应用,系统讲解窗口设计、信号与槽机制、界面布局、事件处理、数据库连接与跨平台打包等核心技能,通过多个桌面应用项目实战,帮助学员快速掌握 Qt 框架并独立完成跨平台GUI软件的开发。

68

2025.08.15

C++ 图形界面开发基础(Qt方向)
C++ 图形界面开发基础(Qt方向)

本专题系统讲解 使用 C++ 与 Qt 进行图形界面(GUI)开发的核心技能,内容涵盖 Qt 项目结构、窗口组件、信号与槽机制、事件处理、布局管理、资源管理,以及跨平台编译与打包流程。通过多个小型桌面应用实战案例,帮助学习者掌握从界面设计到功能实现的完整 GUI 开发能力。

54

2025.12.05

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

532

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

412

2024.03.13

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

89

2023.09.25

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1881

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2087

2024.08.01

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 3.5万人学习

Rust 教程
Rust 教程

共28课时 | 4.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号