当前位置: 首页 > 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.hskmm.com/?act=detail&tid=8821

相关文章:

  • office2024免费永久激活版下载安装教程:含激活步骤 + 一键安装包下载
  • 大学不止GPA
  • 大学目标
  • [论文笔记/评估方法] RELIABLE AND DIVERSE EVALUATION OF LLM MEDICAL KNOWLEDGE MASTERY
  • 本地VMware Workstation Pro的rhel-server-7.9-x86_64服务器配置本地源
  • 2025年十大AI网站构建工具:专家评测与推荐!
  • 扫描线乱谈
  • 详细介绍:量子计算学习(第十四周周报)
  • 视频播放时切出页面视频暂停(亲测可用)
  • VulkanAPI细节梳理1
  • cf773
  • (简记)一类区间覆盖问题 珂朵莉树 ODT
  • 5 事务隔离级别与锁机制
  • 我向编程世界宣布的第一声
  • Win11 安装 MinGW
  • 意大利 公证 海牙认证速度 单号 双号
  • Linux命令学习笔记
  • 网络安全需要真正的承诺而非表面功夫
  • 想成为AI绘画高手?打造独一无二的视觉IP!Seedream 4.0 使用指南详解,创意无界,效率翻倍!
  • 完整教程:液氮低温恒温器的应用领域
  • 轮转数组-leetcode
  • CF1864G Magic Square
  • OI TRICKS
  • day37大模型程序开发-GraphRAG理论
  • G
  • AI Compass前沿速览:Nano Bananary、MCP Registry、通义DeepResearch 、VoxCPM、InternVLAM1具身机器人
  • day3536大模型应用开发-模型微调框架
  • 使用NVM管理Node.js版本
  • day12-Trae之一键换脸APP开发02
  • day35大模型应用开发-模型微调