pugixml是轻量纯头文件C++ XML库,解析分三步:加载(支持文件/字符串/内存)、查询(child/first_child/next_sibling/XPath)、提取(attribute/text);支持修改节点、属性、文本并保存。

pugixml 是一个轻量、快速、纯头文件的 C++ XML 解析库,无需编译、无外部依赖,适合嵌入式或对性能敏感的项目。使用它解析 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)
怎么查找和遍历 XML 节点
用 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()) { ... } - 用 XPath 查询(需启用 PUGIXML_HAS_XPATH):
pugi::xpath_node_set results = doc.select_nodes("//item[@id='1']");
如何读取属性和文本内容
节点的属性和文本通过 attribute() 和 text() 获取,返回对象支持隐式转换:
本文档主要讲述的是使用JSON进行网络数据交换传输;JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON的数据格式非常简单,您可以用 JSON 传输一个简单的 St
立即学习“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()
怎么修改和保存 XML
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 编码。









