当前位置: 首页 > news >正文

rapidXML解析xml文件

1.rapidXML介绍

RapidXML 是一个轻量级、高性能的 XML 解析库,以单头文件形式提供(rapidxml.hpp 及辅助头文件),适合在 C++ 中解析中小型 XML 文档。

  • 获取 RapidXML:从 官方网站 下载头文件(rapidxml.hpp、rapidxml_utils.hpp、rapidxml_print.hpp 等),放入项目目录。
  • 使用方式:在代码中直接包含头文件
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"  // 提供文件读取工具
#include "rapidxml_print.hpp"  // 提供节点打印功能(可选)

2.解析 XML 文件的核心步骤

  • 加载 XML 内容:将文件内容读入内存(字符串)。
  • 解析文档:使用 rapidxml::xml_document 解析字符串,生成节点树。
  • 获取根节点:从解析后的文档中获取根节点。
  • 遍历节点:通过节点的 first_child()、next_sibling() 等方法遍历子节点和属性。

3.解析XML文件

假设存在 data.xml 文件 :

<?xml version="1.0" encoding="UTF-8"?>
<REFCTRL Ver="1.0.0"><para><node name="年龄" value="22" /></para><point><node name="性别" main="1" /><node name="体重" main="50"><sub_node name="小马" main="23" /><sub_node name="小龟" main="34" /></node></point>
</REFCTRL>

解析代码如下:

#include <iostream>
#include <string>
#include "rapidxml.hpp"
#include "rapidxml_utils.hpp"  // 用于快速读取文件using namespace rapidxml;
using namespace std;int main() 
{ file<> xmlFile("data.xml");         // 1. 读取 XML 文件到内存.自动读取文件内容,析构时释放内存xml_document<> doc;                 // 2. 创建文档对象并解析 XML 内容doc.parse<0>(xmlFile.data());       // 解析XML内容xml_node<>* root = doc.first_node("REFCTRL");               // 3. 获取根节点(XML 文档必须有唯一根节点)xml_attribute<>* verAttr = root->first_attribute("Ver");    // 4. 解析根节点的属性(如 Ver="1.0.0")// 5. 遍历根节点的子节点(para 和 point)for (xml_node<>* child = root->first_node(); child; child = child->next_sibling()) {// 6. 遍历子节点的子节点(如 para 下的 node)for (xml_node<>* grandChild = child->first_node(); grandChild; grandChild = grandChild->next_sibling()) {// 7. 解析孙节点的属性(如 name、value、main)xml_attribute<>* nameAttr = grandChild->first_attribute("name");xml_attribute<>* valueAttr = grandChild->first_attribute("value");xml_attribute<>* mainAttr = grandChild->first_attribute("main");// 8. 处理孙节点的子节点(如“体重”node 下的 sub_node)for (xml_node<>* greatGrandChild = grandChild->first_node(); greatGrandChild; greatGrandChild = greatGrandChild->next_sibling()) {xml_attribute<>* subNameAttr = greatGrandChild->first_attribute("name");xml_attribute<>* subMainAttr = greatGrandChild->first_attribute("main");}}}return 0;
}
http://www.gsyq.cn/news/7574.html

相关文章:

  • 大学不止GPA
  • 福昕PDF编辑器专业版破解 v2025 中文版安装使用教程
  • python 架构专业的技术50
  • 本地VMware Workstation Pro的rhel-server-7.9-x86_64服务器配置本地源
  • SCPI 标准命令
  • 前端,真的让我深刻感受到信息闭塞的恐怖 - 指南
  • 2025年十大AI网站构建工具:专家评测与推荐!
  • VulkanAPI细节梳理1
  • 意大利 公证 海牙认证速度 单号 双号
  • Linux命令学习笔记
  • 详细介绍:(附源码)基于Web的《药谷奇遇记》网站设计与实现-计算机毕设 72940
  • 想成为AI绘画高手?打造独一无二的视觉IP!Seedream 4.0 使用指南详解,创意无界,效率翻倍!
  • AI Compass前沿速览:Nano Bananary、MCP Registry、通义DeepResearch 、VoxCPM、InternVLAM1具身机器人
  • day12-Trae之一键换脸APP开发02
  • 详细介绍:今日分享 KMP算法
  • 线性回归与 Softmax 回归核心内容总结 - 教程
  • P6631 [ZJOI2020] 序列 题解
  • 使用 libaudioclient 实现 Android Native层 音频测试工具
  • 03-初始化测试数据
  • 使用Windows客户端访问EDA环境的NFS共享
  • Day03-1
  • Java第三周课前思考
  • RWA技术规范解读:如何实现现实世界资产的合规代币化
  • 实用指南:Java 集合解析
  • 详细介绍:对于牛客网—语言学习篇—C语言入门—链表的题目解析
  • Day17Arrays类的初步认识
  • 服务器安装docker、mysql、redis、nginx、nacos、jdk等
  • 中了勒索病毒 peng
  • PolarFire SoC mpfs-mmuart-interrupt 多核通信
  • SAP FICO 完全凭证替代