TinyXML2解析XML轻量直观,适合嵌入式或中小型项目:加载文件→获取根节点→遍历元素/属性→提取数据;需检查LoadFile返回值、判空指针,支持读写XML。

用 TinyXML2 解析 XML 文件在 C++ 中非常轻量、直观,不需要依赖大型框架,适合嵌入式或中小型项目。核心思路是:加载 XML 文本 → 获取根节点 → 逐层遍历元素/属性 → 提取所需数据。
1. 安装与引入 TinyXML2
TinyXML2 是单头文件库,只需下载 tinyxml2.h 和 tinyxml2.cpp(官方 GitHub 可直接获取),添加到你的项目中即可。C++ 项目里只需:
- #include "tinyxml2.h"
- 链接时确保编译了 tinyxml2.cpp(或将其设为源文件参与编译)
- 使用命名空间 tinyxml2::(例如 tinyxml2::XMLDocument)
2. 加载并验证 XML 文件
先创建 XMLDocument 对象,再用 LoadFile() 读取文件。务必检查返回值,避免空指针操作:
- tinyxml2::XMLDocument doc;
- tinyxml2::XMLError err = doc.LoadFile("config.xml");
- 如果 err != tinyxml2::XML_SUCCESS,说明加载失败(路径错、格式非法等)
- 可用 doc.ErrorIDToName(err) 获取错误名,方便调试
3. 遍历节点并提取数据
从根节点开始,用 FirstChildElement() 向下查找,用 NextSiblingElement() 横向遍历。推荐链式写法,简洁安全:
立即学习“C++免费学习笔记(深入)”;
- auto* root = doc.FirstChildElement("config"); // 找根元素
- auto* item = root->FirstChildElement("item"); // 找第一个 item
- while (item) {
- const char* name = item->Attribute("name"); // 读属性
- const char* value = item->GetText(); // 读文本内容
- item = item->NextSiblingElement("item"); // 下一个同级 item
- }
注意:Attribute() 返回 const char*,为空时返回 nullptr;GetText() 对空文本返回 nullptr,建议判空后再用 std::string(value ? value : "") 转换。
4. 写入简单 XML(可选扩展)
TinyXML2 也支持生成 XML。流程是:创建文档 → 添加声明 → 创建元素 → 设置属性/文本 → 插入子节点 → 保存:
- tinyxml2::XMLDocument doc;
- doc.InsertFirstChild(doc.NewDeclaration());
- auto* root = doc.NewElement("data");
- auto* child = doc.NewElement("entry");
- child->SetAttribute("id", "101");
- child->SetText("Hello World");
- root->InsertEndChild(child);
- doc.InsertEndChild(root);
- doc.SaveFile("output.xml");
基本上就这些。TinyXML2 不复杂但容易忽略错误检查和空指针判断,实际用起来稳得住的关键就是每一步都确认非空再操作。










