pugixml C++ 开发者处理 XML 数据的理想选择之一

pugixml 是一个广受好评的 C++ XML 解析库,其相对优势包括但不限于以下几个方面:

pugixml 以其高效、易用、全面的功能和良好的跨平台能力成为 C++ 开发者处理 XML 数据的理想选择之一。

链接:

使用Pugixml库,轻松处理XML文件-CSDN博客

pugixml github下载地址:

使用Pugixml库,轻松处理XML文件-CSDN博客


重点:

读取如下一个xml

 代码:

#include <map>
#include "pugixml.hpp"
#include <filesystem>
#include <map>

struct MenuItem
{
	std::wstring s_name; //中文名称
	std::wstring s_cmd;  //命令名称
	int s_picIndex; //图片资源索引
	int s_option;   //布置类型
	MenuItem()
	{
		s_name = std::wstring{};
		s_cmd = std::wstring{};
		s_picIndex = 0;
		s_option = 0;
	}

	MenuItem(const MenuItem& data)
	{
		s_name = data.s_name;
		s_cmd = data.s_cmd;
		s_picIndex = data.s_picIndex;
		s_option = data.s_option;
	}
};

struct MenuItemInfo
{
	std::vector<MenuItem> s_itemInfo;
	bool s_enable{ true };
};

bool isFileExistsWithFS(const std::wstring& filename) {
	namespace fs = std::filesystem;
	return fs::exists(fs::path(filename));
}



void GetCommonDataFromXmlNodeInfo(const pugi::xml_node& node, MenuItemInfo& info, bool option = false)
{
	auto items = node.children(L"item");
	for (auto& var : items)
	{
		MenuItem data;
		data.s_name = var.attribute(L"name").as_string();
		data.s_cmd = var.attribute(L"cmd").as_string();
		data.s_picIndex = var.attribute(L"picIndex").as_int();
		if (option)
		{
			data.s_option = var.attribute(L"option").as_int();
		}
		info.s_itemInfo.emplace_back(data);
	}
}

int main() 
{
	std::wstring  n_lastCmd = L"重复";       //重复
	std::wstring  n_deselect = L"取消选择";  //取消选择
	std::wstring  n_do = L"do";              //do
	std::wstring  n_changeCmd = L"修改命令";
	std::wstring  n_calculate = L"计算操作";
	std::wstring  n_calset = L"计算设置";
	std::wstring  n_commandOp = L"通用操作";
	std::wstring  n_visible = L"显隐操作";

	MenuItemInfo m_lastCmd;     //重复上一个命令
	MenuItemInfo m_deselect;    //取消选择
	MenuItemInfo m_do;          //undo/redo
	MenuItemInfo m_changeCmd;   //修改命令
	MenuItemInfo m_calculate;   //计算操作
	MenuItemInfo m_calset;      //计算设置
	MenuItemInfo m_commandOp;   //通用操作
	MenuItemInfo m_visible;     //显隐控制

	std::map<std::wstring, MenuItemInfo&> commonGroup{ {n_lastCmd ,m_lastCmd},{n_deselect,m_deselect}, {n_do,m_do} ,
		{n_calculate,m_calculate} ,{n_calset,m_calset} ,{n_commandOp,m_commandOp} ,{n_visible,m_visible} };

	std::wstring menuPath = L".//File//xmlpugi.xml";

	pugi::xml_document xmlDoc;

	if (!isFileExistsWithFS(menuPath))
	{
		return 0;
	}
	else
	{
		xmlDoc.load_file(menuPath.c_str(), pugi::parse_default, pugi::encoding_utf8);

		pugi::xml_node rootNode = xmlDoc.child(L"root");
		if (rootNode.empty())
		{
			return 0;
		}

		auto groupNode = rootNode.children(L"group");

		for (auto& node : groupNode)
		{
			std::wstring groupName = node.attribute(L"groupName").as_string();
			auto iter = commonGroup.find(groupName);
			if (iter != commonGroup.end())
			{
				GetCommonDataFromXmlNodeInfo(node, iter->second);
			}
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/537754.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法

vue 的设计模式 —— MVVM M —— Model 模型&#xff0c;即数据V —— View 视图&#xff0c;即DOM渲染VM —— ViewModel 视图模型&#xff0c;用于实现Model和View的通信&#xff0c;即数据改变驱动视图渲染&#xff0c;监听视图事件修改数据 初次渲染 将模板编译为 render …

Prometheus报错,查不到数据

Warning: Error fetching server time: Detected 28799.947999954224 seconds time difference between your browser and the server. Prometheus relies on accurate time and time drift might cause unexpected query results. 1.这是因为服务器和本地时间不同步导致的 查…

抖店怎么回复客户消息才能减少差评?分享几个超级实用的话术!

哈喽~我是电商月月 新手入驻抖音小店出单后&#xff0c;或多或少都会遇到差评现象 差评私信不解决&#xff0c;顾客不满意&#xff0c;店铺的体验分下降&#xff0c;差评也能被所有的顾客看见 那之后的顾客就会觉得店铺不可靠&#xff0c;那新手如何避免这一现象呢 今天我就…

SLF4J对lombok类型的对象调用toString()失败--StackOverflowError

PackingDemand.class StatusHistory.class 造成该问题的原因是&#xff1a;PackingDemand与StatusHistory之间的双向引用。这些类中生成的两个toString()方法都会无休止地相互调用导致出现java.lang.StackOverflowError。 解决方法&#xff1a; 1.对于使用ToString.Exclude生…

Redis学习从入门到掌握(基础篇)

文章目录 一、初识Redis1.认识 Redis2.Redis常见命令&#xff08;1&#xff09;Redis 数据结构介绍&#xff08;2&#xff09;Redis 通用命令&#xff08;3&#xff09;String 类型&#xff08;4&#xff09;String 类型的常见命令&#xff08;5&#xff09;Hash 类型&#xff…

练习6 beach beauty

文章目录 图片展示 图片展示

说说我理解的数据库中的Schema吧

一、SQL标准对schema如何定义&#xff1f; ISO/IEC 9075-1 SQL标准中将schema定义为描述符的持久命名集合&#xff08;a persistent, named collection of descriptors&#xff09;。 大部分的网上资料定义Schema如下&#xff1a; schema是用来组织和管理数据的一种方式。它…

【渲染加速秘籍】3D建模不再卡顿:硬件升级、场景优化与云渲染全攻略!

在使用3D建模软件时&#xff0c;我们经常会遇到硬件资源消耗较大的问题&#xff0c;尤其是在进行染操作时。为了解决这一问题&#xff0c;我们可以采取以下几种方法来优化我们的工作流程和提升渲染效率。 1.升级硬件设备 对于经常需要进行渲染工作的用户来说&#xff0c;投资高…

让你的进程24小时在linux上运行

xshell原理 可能我们都在使用xshell时&#xff0c;都会遇到一些问题&#xff0c;就是你在xshell运行了你的服务器。可是你把xshell页面一关&#xff0c;你的服务器就自动关闭了&#xff0c;这是为什么呢&#xff1f;&#xff1f; 本质是因为我们的xshell在登陆服务器时&#…

前端对接fastGPT流式数据+打字机效果

首先在对接api时 参数要设置stream: true, const data {chatId: abc,stream: true,//这里true返回流式数据detail: false,variables: {uid: sfdsdf,name: zhaoyunyao,},messages: [{ content: text, role: user }]}; 不要用axios发请求 不然处理不了流式数据 我这里使用fetch …

细胞世界:4.细胞分化(划区域)与细胞衰老(设施磨损)

(1)细胞凋亡 1. 概念&#xff1a;细胞凋亡可以比作城市的规划者主动拆除某些建筑来更新城市或防止危险建筑对市民的潜在伤害。这是一个有序的过程&#xff0c;由城市&#xff08;细胞内部&#xff09;的特定规划&#xff08;基因&#xff09;所决定。 2. 特征&#xff1a;细…

特别详细的Spring Cloud 系列教程2:微服务网关gateway的启动

继上一篇&#xff1a;特别详细的Spring Cloud 系列教程1&#xff1a;服务注册中心Eureka的启动 在比较多的教程和书籍里&#xff0c;spring cloud的微服务网关用的Zuul。然而&#xff0c;zuul已经不被官方提倡&#xff0c;现在提倡用的是spring cloud gateway。因为gateway的整…

c++编程(3)——类和对象(1)、类

欢迎来到博主的专栏——c编程 博主ID&#xff1a;代码小豪 文章目录 类对象类的访问权限类的作用域 类 c最初对c语言的扩展就是增加了类的概念&#xff0c;使得c语言在原有的基础之上可以做到信息隐藏和封装。 那么我们先来讲讲“带类的c”与C语言相比有什么改进。 先讲讲类…

2024数学建模认证杯A题成品论文更新+全套数据集+可执行代码+可视化结果图标+学长保姆级答疑

题目&#xff1a;《基于TOPSIS和数值模拟的保暖纤维性能综合评价研究 &#xff08;完整资料论文都在文末&#xff01;&#xff01;&#xff09; 摘要&#xff1a;本研究通过数学建模方法深入探讨了人造保暖纤维的保暖性能&#xff0c;并建立了一个综合性的评价体系来全面…

scaling laws for neural language models

关于scaling law 的正确认识 - 知乎最近scaling law 成了最大的热词。一般的理解就是&#xff0c;想干大模型&#xff0c;清洗干净数据&#xff0c;然后把数据tokens量堆上来&#xff0c;然后搭建一个海量H100的集群&#xff0c;干就完了。训练模型不需要啥技巧&#xff0c;模型…

19(20)-1(3)-CSS3 平面 2D 变换+CSS3 过渡

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍一、CSS3 平面 2D 变换&#x1f48e;1 坐标轴&#x1f48e;2 transform 语法…

jenkins+sonar配置

安装插件 Sonar Scanner 用于扫描项目 配置sonar scanner jenkins集成sonar 1、sonar生成token 生成完保存好&#xff0c;刷新后无法查看 2、jenkins配置全局凭据 3、jenkins配置系统设置

浅谈性能测试

本文主要针对WEB系统的性能测试。不涉及具体的执行操作&#xff0c;只是本人对性能测试的一点理解和认识。 性能测试的目的&#xff0c;简单说其实就是为了获取待测系统的响应时间、吞吐量、稳定性、容量等信息。而发现一些具体的性能相关的缺陷&#xff08;如内存溢出、并发处…

关于配置nginx的反向代理时出现的一些问题及解决方法

1.配置反向代理 &#xff08;1&#xff09;上传nginx.conf到/opt/nginx/conf/中&#xff0c;并覆盖。 #查看一下IP是否正确&#xff08;需要将文件中的IP改成自己的IP&#xff09; cat /opt/nginx/conf/nginx.conf &#xff08;2&#xff09;重启 cd /opt/nginx/sbin ./n…

day9 next商业项目初探·五(java转ts全栈/3R教室)

背景&#xff1a;从头一点点学起太慢了&#xff0c;直接看几个商业项目吧&#xff0c;看看根据Java的经验&#xff0c;自己能看懂多少&#xff0c;然后再系统学的话也会更有针对性。今天看下一个项目 huanghanzhilian/c-shopping: A beautiful shopping platform developed wit…