pugixml — 支持原生 XPath 的高效 XML 解析库
摘要
本文解释如何使用 pugixml 处理 XML 数据。该处理库可使用 DOM 解析器读取和操作节点,并用 XPATH 表示法查询节点。
如何构建
构建源码需从 https://github.com/zeux/pugixml/tags 下载发布版。现可用 Phoenix Contact 提供的 PLCnext 工具链交叉编译源码。以下代码片段展示交叉编译的 cmake script:
#Please set the environment variables to your needs cmake \ -G "Unix Malkefiles" \ -D CMAKE_BUILD_TYPE=Release \ -D BUILD_TESTING=OFF \ -D BUILD_SHARED_LIBS=ON \ -D "CMAKE_STAGING_PREFIX=${CMAKE_STAGING_PREFIX}" \ -D "CMAKE_INSTALL_PREFIX=${CMAKE_STAGING_PREFIX}" \ -D "CMAKE_TOOLCHAIN_FILE=${ARP_TOOLCHAIN_FILE}" \ -D "ARP_TOOLCHAIN_ROOT= ${ARP_TOOLCHAIN_ROOT}" \ -D BUILD_TESTS=OFF \ -S "${SOURCE_DIRECTORY}" \ -B "${BUILD_DIRECTORY}" cmake --build "${BUILD_DIRECTORY}" --target install
如何使用
首先将 C++ header 和库集成到项目环境。完成后即可使用 pugixml 处理。
加载文档
pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file("data.xml"); ...
从给定节点遍历子节点
可通过 DOM 树遍历,也可操作节点。
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool"); //遍历子节点 for (pugi::xml_node tool: tools) { std::cout << " " << tool.name(); //获取属性 for (pugi::xml_attribute attr: tool.attributes()) { std::cout << " " << attr.name() << "=" << attr.value(); } }
使用 XPath
XPath 让您轻松访问节点和属性。
//访问节点 pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool"); pugi::xpath_node_set all_tools = doc.select_nodes("//Tool"); //访问属性 auto docIdNode = doc.select_node("@ID"); auto docIdNode_One = doc.select_node("//Tool[@ID==1]");
保存 XML 文档
可保存 XML 文档。
doc.save_file("new_data.xml");
更多信息
若对 pugixml 感兴趣,可查看以下链接:
- GitHub: https://github.com/zeux/pugixml
- Website: https://pugixml.org/
许可证
库采用 MIT License 发布
工业技术
- 简化金属3D打印:支撑结构管理专家技巧
- Almco新型清洗槽:大幅加速FDM零件支撑移除
- 开关控制电路实战:从原理图到面包板的基础电路构建
- 科学计数法乘除法精通:简化极值运算
- 工业4.0洞察:Bosch.IO高级解决方案架构师Verena Majuntke谈物联网、自动化与未来工厂
- CNC珠宝加工全攻略:从工艺到实战
- Linq: 现代 C++ 的强大列表处理库
- 瑞萨发布RX72M MCU 内置EtherCAT从站控制器 面向工业自动化
- C++ std::map 完全指南:键值对容器、核心操作与实战代码
- C 语言 calloc() 详解:零初始化动态分配原理与实战案例
- C 语言 free() 函数实战指南:正确释放动态内存、防泄漏与避坑全解析
- Python XML 处理指南:实现跨平台数据互操作