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

C++ XML 处理库 PugiXML 使用指南与实战

Pugixml 是轻量级高性能 C++ XML 解析库,支持 DOM 接口、XPath 查询及 Unicode。介绍其核心特性、MIT 协议许可范围,并通过加载、遍历、修改及 XPath 查询等代码示例,展示如何在实际项目中高效集成该库进行配置文件读取与数据处理。

山野诗人发布于 2026/3/22更新于 2026/9/1053 浏览

C++ XML 处理库 PugiXML 使用指南与实战

pugixml 是一款经典且高效的 C++ XML 处理库,非常适合用于学习项目结构或构建高性能应用。以下基于 v1.15 版本整理其核心信息与实战用法。

基础信息

作为高知名度的开源项目,pugixml 拥有超过 330 个公共代码库依赖,在 vcpkg 包管理器中热度排名前 5.4%。它采用宽松的 MIT 许可证,允许在商业项目中自由使用、修改和分发,仅需保留原作者版权声明。

核心优势

  • DOM-like 接口:直观遍历与修改 XML 文档树。
  • 高性能解析:非验证性解析器速度极快,适合性能敏感场景。
  • XPath 支持:内置 XPath 1.0 实现,支持复杂查询。
  • Unicode 兼容:完美支持多种编码并自动转换。

广泛应用于 Assimp、Qt 模块及各类游戏引擎中。

环境准备

Windows x64 环境下需包含以下文件:

  • 头文件:pugiconfig.hpp, pugixml.hpp
  • 库文件:pugixml.lib

实战代码示例

1. 加载与遍历

从文件加载 XML 并遍历节点是基础操作。注意检查加载结果是否成功。

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

int traverse_base() {
    pugi::xml_document doc;
    // 替换为实际路径
    if (!doc.load_file("xgconsole.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 可以快速定位特定元素,支持编译后的查询对象以提升性能。

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

    // 编译查询对象
    pugi::xpath_query query_remote_tools("/Profile/Tools/Tool[@AllowRemote='true']");
    pugi::xpath_node_set tools = query_remote_tools.evaluate_node_set(doc);

    if (!tools.empty()) {
        std::cout << "Remote tool: ";
        tools[0].node().print(std::cout);
    }

    // 数值计算
    pugi::xpath_query query_timeouts("sum(//Tool/@Timeout)");
    std::cout << "Total Timeout: " << query_timeouts.evaluate_number(doc) << std::endl;
    return 0;
}

3. 文档修改

动态添加节点、属性并保存是常见需求。

int modify_add() {
    pugi::xml_document doc;
    // 添加新节点
    pugi::xml_node node = doc.append_child("node");
    // 添加文本子节点
    pugi::xml_node descr = node.append_child("description");
    descr.append_child(pugi::node_pcdata).set_value("Simple node");
    // 添加属性
    pugi::xml_node param = node.insert_child_before("param", descr);
    param.append_attribute("name") = "version";
    param.append_attribute("value") = 1.1;
    
    doc.print(std::cout);
    return 0;
}

4. 异常处理

XPath 查询可能抛出异常,建议捕获 pugi::xpath_exception 以避免程序崩溃。

int xpath_error() {
    pugi::xml_document doc;
    if (!doc.load_file("xgconsole.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;
}

总结

pugixml 以其轻量、快速和易用性成为 C++ 领域处理 XML 的首选之一。通过上述示例,你可以掌握从加载、查询到修改的完整流程。在实际集成时,请确保链接对应的库文件,并根据项目需求调整解析选项。

目录

  1. C++ XML 处理库 PugiXML 使用指南与实战
  2. 基础信息
  3. 核心优势
  4. 环境准备
  5. 实战代码示例
  6. 1. 加载与遍历
  7. 2. XPath 查询
  8. 3. 文档修改
  9. 4. 异常处理
  10. 总结

更多推荐文章

查看全部
  • node-llama-cpp 安装与配置:Windows、Linux 和 Mac 教程
  • ROS2+Gazebo+PX4 环境搭建与无人机起飞实战
  • Rust 异步 API 设计与 Axum 框架实战
  • 深入解析 pb_ds 库:C++ 高性能数据结构实战指南
  • Android 端 Whisper 中文语音识别实战:模型部署与性能优化
  • 基于 Python 实现多浏览器并行注入的实战方案
  • 基于 DeepFace 和 OpenCV 的情绪分析器实现
  • 自主无人机硬件搭建及 EGOPlanner 实现
  • Git 下载 GitHub 项目卡顿?使用清华镜像加速获取
  • RAG 应用开发的 7 种主流 Embedding 模型解析
  • baoyu-skills:使用 AI 辅助技术文章配图与排版
  • 使用 AKShare 获取 A 股历史行情数据
  • Python+AI 构建每日新闻简报:聚合热搜、智能摘要与语音播报
  • CANopen 在机器人控制器开发中的应用解析
  • MySQL Workbench 图形化管理工具的安装与使用指南
  • Python 2026 发展局势:AI 时代的通用基础设施语言
  • AI Agent 技术解析:定义、架构与主流框架实践
  • C++ 程序编译缓慢原因分析:滥用 stdafx.h 公共头文件
  • 基于 Netty 构建高性能 HTTP 服务器实战
  • Flutter for OpenHarmony 集成 dart_openai 实现 AIGC 功能

相关免费在线工具

  • 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