推荐使用QXmlStreamReader和QXmlStreamWriter处理XML:前者基于事件流、内存友好,适合大文件解析;后者按需生成、自动转义缩进,写入简洁安全。

Qt 处理 XML 文件推荐用 QXmlStreamReader(读)和 QXmlStreamWriter(写),它们是基于事件流的轻量级、高效、内存友好的方案,比 DOM(QDomDocument)更适合大文件或性能敏感场景。
QXmlStreamReader:边读边解析,不加载整个文档
适合解析结构清晰、顺序固定的 XML,比如配置文件、日志、简单数据交换格式。它逐个读取“令牌”(token),如开始标签、文本内容、结束标签等,你需要自己维护上下文状态。
- 创建后调用
readNext()推进到下一个元素,再用tokenType()判断类型(StartElement、Characters、EndElement等) - 遇到
StartElement可用name()获取标签名,attributes()拿属性列表 - 遇到
Characters时用text().toString()提取文本内容(注意可能含空白或换行,建议用isWhitespace()过滤) - 支持嵌套层级判断:用
depth()或手动计数(如进入<item></item>时 ++,退出时 --)
QXmlStreamWriter:按需生成格式化 XML
写 XML 更简单直观——你控制输出顺序,它负责转义、缩进和语法正确性。
- 构造时传入
QTextStream(可绑定 QFile 或 QByteArray),自动处理编码(默认 UTF-8) - 常用方法:
writeStartDocument()→writeStartElement("tag")→writeAttribute("key", "value")→writeCharacters("text")→writeEndElement()→writeEndDocument() - 启用自动缩进:调用
setAutoFormatting(true),再设setAutoFormattingIndent(2) - 中文等 Unicode 内容无需额外处理,只要 QTextStream 编码设置正确(通常默认 OK)
实用小技巧与避坑点
实际用的时候容易卡在几个细节上:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~