信息发布→ 登录 注册 退出

C++ pugixml库怎么用 轻量级XML解析器

发布时间:2026-01-10

点击量:
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() 获取,返回对象支持隐式转换:

立即学习“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 编码。

标签:# int  # 或对  # 如需  # 分三步  # 隐式  # 文档  # 头文件  # 是一个  # 的是  # 遍历  # 加载  # default  # 对象  # 空指针  # Attribute  # 指针  # node  # char  # bool  # 字符串  # const  # xml  # for  # if  # String  # 隐式转换  # xml解析  # stream  # c++  # app  # 编码  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!