pugixml是轻量纯头文件C++ XML库,解析分三步:加载(支持文件/字符串/内存)、查询(child/first_child/next_sibling/XPath)、提取(attribute/text);支持修改节点、属性、文本并保存。
pugixml 是一个轻量、快速、纯头文件的 C++ XML 解析库,无需编译、无外部依赖,适合嵌入式或对性能敏感的项目。使用它解析 XML 主要分三步:加载文档、查询节点、提取数据。
支持从字符串、文件或内存缓冲区加载。最常用的是 pugi::xml_document::load_file() 和 load_string()
:
pugi::xml_document doc; doc.load_file("config.xml");
doc.load_string("- abc
");
if (!doc) { /* 加载失败 */ }(pugi::xml_document 可隐式转为 bool)用 XPath 风格的 child()、first_child()、next_sibling() 或 select_node() 查询:
pugi::xml_node root = doc.document_element();
pugi::xml_node item = root.child("item");
for (pugi::xml_node node = root.first_child(); node; node = node.next_sibling()) { ... }
pugi::xpath_node_set results = doc.select_nodes("//item[@id='1']");
节点的属性和文本通过 attribute() 和 text() 获取,返回对象支持隐式转换:
立即学习“C++免费学习笔记(深入)”;
const char* id = item.attribute("id").as_string(); 或 int val = item.attribute("id").as_int();
std::string content = item.text().as_string();
item.attribute("id").empty() ? "default" : item.attribute("id").as_string()
pugixml 支持在内存中构建、修改文档,再写回文件或字符串:
pugi::xml_node new_item = root.append_child("item");
new_item.append_attribute("id").set_value("2");
new_item.text().set("xyz");
doc.save_file("output.xml");,或到字符串:std::stringstream ss; doc.save(ss);
不复杂但容易忽略:默认只解析到第一个错误就停止,如需容错可传入 pugi::parse_default | pugi::parse_trim_pcdata 等标志;中文等 UTF-8 内容无需额外处理,但确保源文件本身是 UTF-8 编码。