TinyXML-2解析XML只需三步:加载文档、定位节点、提取数据;支持文件/字符串加载,通过FirstChildElement和Attribute等接口遍历元素与属性,注意空指针检查、UTF-8编码及字符串生命周期。
用 TinyXML-2 解析 XML 在 C++ 中非常轻量且直观,核心就三步:加载文档、定位节点、提取数据。它不依赖外部库,头文件即用,适合嵌入式或中小型项目。
从官网或 GitHub 下载 tinyxml2.h 和 tinyxml2.cpp,加入工程。C++ 中只需包含头文件:
#include "tinyxml2.h"
加载方式有两种:
务必检查返回值:if (doc.ErrorID() != tinyxml2::XML_SUCCESS) { /* 处理错误 */ }
TinyXML-2 中主要操作对象是 XMLElement(代表标签)和 XMLText(代表文本内容)。推荐用父子关系逐层查找:
支持链式调用:root->FirstChildElement("item")->Attribute("id"),但要注意空指针,建议每步判空。
遇到多个同名子节点(如多个 ),用 NextSiblingElement() 迭代:
for (auto* user = root->FirstChildElement("user"); user != nullptr; user = user->NextSiblingElement("user")) {
const char* name = user->Attribute("name");
const char* age = user->FirstChildElement("age")->GetText();
}
注意:参数传入标签名可跳过非目标兄弟节点,避免误匹配。
• TinyXML-2 默认不
处理注释和 CDATA,如需保留,初始化时加 doc.SetUserData(nullptr) 并启用相关选项(较新版本支持 XMLDocument::SetUserData() 配合回调);
• 字符串全部以 const char* 形式返回,生命周期绑定文档,不要在 doc 被销毁后使用;
• 中文等 UTF-8 内容无需额外设置,但确保源文件和 XML 文件本身保存为 UTF-8 编码;
• 修改 XML 后写回文件用 doc.SaveFile("out.xml"),支持缩进格式化(默认开启)。