TinyXML2解析XML分三步:加载文档、查找节点、提取数据;它轻量单头文件、无需外部依赖,适合嵌入式或中小型项目。

用 TinyXML2 解析 XML 很简单,核心就三步:加载文档、查找节点、提取数据。它轻量、头文件即用、不依赖外部库,适合嵌入式或中小型项目。
一、快速开始:编译与初始化
TinyXML2 是单头文件库,直接下载 tinyxml2.h 和 tinyxml2.cpp,加到你的工程里即可。C++ 项目中只需:
- #include "tinyxml2.h"
- 链接时确保 tinyxml2.cpp 被编译进目标
- 命名空间是 tinyxml2,常用类有 XMLDocument、XMLElement、XMLText
二、加载 XML:从文件或字符串
支持两种加载方式,出错时记得检查返回值:
- 从文件:doc.LoadFile("config.xml"),返回 XML_SUCCESS 表示成功
- 从字符串:doc.Parse("
")- abc
- 加载失败可调用 doc.ErrorID() 或 doc.ErrorStr() 查看具体错误
三、遍历与读取节点
推荐用层级查找 + 属性/文本提取,避免硬编码索引:
立即学习“C++免费学习笔记(深入)”;
- 获取根节点:auto* root = doc.FirstChildElement("root")
- 遍历子元素:for (auto* elem = root->FirstChildElement(); elem; elem = elem->NextSiblingElement())
- 读属性:int id; elem->QueryIntAttribute("id", &id)(安全,失败不崩溃)
- 读文本内容:elem->GetText(),或 elem->FirstChild()->ToText()->Value()(更严谨)
四、常见坑与建议
新手容易卡在这几处:
- XML 中的注释、空白文本节点会被当作文本节点,用 NextSiblingElement() 而不是 NextSibling() 避开
- 中文内容需确认 XML 声明是否为 ,TinyXML2 默认按 UTF-8 解析
- 节点指针在 XMLDocument 生命周期外失效,别保存裸指针;如需长期持有,考虑深拷贝或用 XMLNode::DeepClone()
- 修改后保存:调用 doc.SaveFile("out.xml"),注意路径权限和编码无 BOM
不复杂但容易忽略细节,把加载、查节点、取值这三步串起来,大部分 XML 解析需求就覆盖了。










