跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

C++工具库之PugiXML使用指南

pugixml 是一款轻量级、高性能的 C++ XML 处理库,采用 MIT 协议。它提供 DOM 风格接口、XPath 1.0 支持及 Unicode 编码自动转换。其核心特性、环境配置及加载、遍历、查询、修改 XML 文档的代码示例,适用于配置文件读取、数据持久化等场景。

疯疯癫癫发布于 2026/3/29更新于 2026/10/26109 浏览

pugixml 简介

pugixml 是一个非常经典且优秀的 C++ XML 处理库,适合用来学习项目结构和编写高效代码。它采用 MIT 许可证,允许在商业项目中自由使用、修改和分发。

核心特性

  • DOM-like 接口:提供直观的方式来遍历、修改 XML 文档树。
  • 极高的解析速度:非验证性 XML 解析器性能出色,适合性能敏感的场景。
  • XPath 支持:内置了 XPath 1.0 的实现,可以执行复杂的数据查询。
  • Unicode 支持:完美支持多种 Unicode 编码,并能自动处理编码转换。

由于其高效和易用的特性,它被广泛应用于各种项目中,例如 3D 模型导入库 Assimp、部分 Qt 模块,以及许多自定义的游戏引擎和工具链中。

环境配置

编译时需要包含以下头文件和库文件:

  • 头文件:pugiconfig.hpp, pugixml.hpp
  • 库文件:pugixml.lib (Windows) / libpugixml.a (Linux/macOS)

代码示例

1. 加载与遍历

从文件加载 XML 并遍历所有节点。

#include <iostream>
#include "pugixml/pugixml.hpp"

int traverse_base() {
    pugi::xml_document doc;
    // 替换为实际存在的文件路径
    if (!doc.load_file("config.xml")) return -1;
    
    pugi::xml_node tools = doc.child("Profile").child("Tools");
    for (pugi::xml_node tool = tools.first_child(); tool; tool = tool.next_sibling()) {
        std::cout << "Tool:";
        for (pugi::xml_attribute attr = tool.first_attribute(); attr; attr = attr.next_attribute()) {
            std::cout << " " << attr.name() << "=" << attr.value();
        }
        std::cout << std::endl;
    }
    return 0;
}

2. XPath 查询

使用 XPath 语言快速定位复杂 XML 中的元素。

int xpath_query() {
    pugi::xml_document doc;
    if (!doc.load_file("config.xml")) return -1;

    // 选择单个节点
    pugi::xpath_node tool = doc.select_node("//tool[@id='1']");
    
    // 选择节点集
    pugi::xpath_node_set tools = doc.select_nodes("//tool[@timeout>0]");
    
    // 遍历结果
    for (auto& node : tools) {
        std::cout << "Found tool: " << node.node().name() << std::endl;
    }
    return 0;
}

3. 修改文档

添加/删除节点和属性,并保存文档。

int modify_add() {
    pugi::xml_document doc;
    pugi::xml_node node = doc.append_child("new-node");
    node.append_attribute("name") = "value";
    
    // 保存文档
    doc.save_file("output.xml");
    return 0;
}

4. 错误处理

XPath 查询语法或语义错误会抛出异常。

int xpath_error() {
    pugi::xml_document doc;
    if (!doc.load_file("config.xml")) return -1;
    
    try {
        doc.select_nodes("//nodes[#true()]");
    } catch (const pugi::xpath_exception& e) {
        std::cout << "Select failed: " << e.what() << std::endl;
    }
    return 0;
}

目录

  1. pugixml 简介
  2. 核心特性
  3. 环境配置
  4. 代码示例
  5. 1. 加载与遍历
  6. 2. XPath 查询
  7. 3. 修改文档
  8. 4. 错误处理

更多推荐文章

查看全部
  • 基于 Claude Code 的 AI 内容创作自动化工作流实战
  • 网络安全专家常用的 9 大工具
  • Linux 动态库与静态库技术详解
  • C++ AVL 树原理与实现详解
  • VSCode Copilot 接入 OpenAI 兼容自定义模型方案
  • 声源定位算法基础:常规波束形成(CBF)原理
  • AI 帮我改 Bug:小厂架构师的 Agent 落地实战与反思
  • Android 照片墙效果实现:GridView 与 LruCache 优化
  • C++ 初阶核心:命名空间、输入输出与函数重载
  • 面向 C++ 开发的 Web 自动化测试入门:从概念到 Selenium 实战
  • 微信群智能管理:扣子机器人接入实战
  • 在 Cursor 中配置和使用 MCP 服务指南
  • Spring Boot 配置加载顺序详解
  • OpenClaw Session 机制详解:重置、压缩、剪枝与记忆管理
  • CentOS 7 安装配置 Ollama 及模型加载指南
  • 基于 AI 大模型与 Playwright 的 Web UI 自动化测试实践
  • 2026 年 AI 写作辅助工具精选:5 款主流软件深度评测
  • AI Agent 开发入门:零基础学习指南
  • 网络安全入门核心知识点与学习路径指南
  • 基于 OpenClaw 架构构建 C++ 量化交易引擎 QuantClaw 实战

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online