Windows下用CMake编译PugiXML及配置测试
作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
PugiXML是什么?
PugiXML 是一个用于解析和操作 XML 文档的 C++ 库。它提供了简单易用的接口,能够高效地加载、解析和修改 XML 数据。PugiXML 的主要特点包括:
-
轻量级和高效性: PugiXML 被设计成一个轻量级的库,具有高效的性能。它采用了一种基于指针的数据结构,能够快速地解析和操作 XML 文档。
-
简单易用的接口: PugiXML 提供了简单易用的 API,使得 XML 文档的操作变得容易和直观。它采用了类似于 DOM(文档对象模型)的数据结构,允许用户通过节点、属性和文本内容来访问和修改 XML 文档的各个部分。
-
跨平台性: PugiXML 被设计成一个跨平台的库,可以在各种操作系统上运行,包括 Windows、Linux 和 macOS 等。
-
开源和免费: PugiXML 是一个开源项目,采用 MIT 许可证发布,可以免费用于商业和非商业项目。
总的来说,PugiXML 是一个简单、高效且易于使用的 C++ XML 解析库,适用于各种类型的应用程序,包括游戏开发、图形界面程序、数据处理等领域。
下载与编译
1)网站:https://pugixml.org/,下载PugiXML压缩包。

2)解压后如下图所示,还需要用CMake进行编译。
CMake安装和配置参考:Windows下配置CMake(入门级教程,适合新人收藏学习)_window cmake-CSDN博客

3)安装好CMake后,按Win+R打开运行,输入cmd打开命令运行窗,输入cmake-gui,中间无空格,会出现cmake界面。source输入PugiXML的文件路径,build可以在其路径下创建个build文件夹,如下图所示。勾选advanced。

4)点击configure配置,我是vs2017 x64,点确定就开始运行了。

5)configure第一次后应该要进行一次配置。BUILD_SHARED_ILBS打钩,为了后面生成库;CMAKE_INSTALL_PREFIX设置生成库的路径,建议是在其目录下创建个bin文件。



6)然后再次点击configure,只要有红色就再点,等没有红色后点击generate,生成完毕后build文件如下所示。点击sln进入项目。

7)进入build文件夹,点击sln项目工程文件;选中ALL_BUILD,选择release/debug,再点击生成ALL_BUILD,此时会进行一段时间的编译操作;再选中INSTALL,点击仅生成,等待结束去看之前设置的bin文件夹,分别是DLL、头文件和LIB。





8)至此,PugiXML库的编译已经结束。
配置与测试
1)编辑环境变量,输入bin文件路径。

2)创建一个VS项目,可以单项目配置也可以全局配置,我喜欢每个项目独立开,各配置各的,就这样演示了。在项目设置中,包含目录中放include路径,库目录放lib路径。

3)链接器-输入-附加依赖项-lib名字。

4)接下来,开始测试,输入下方代码,看看VS有没有异常提示,如果没有就直接运行,就ok啦。
#include <algorithm>
#include <chrono>
#include <ctime>
#include <direct.h>
#include <functional>
#include <fstream>
#include <iostream>
#include <io.h>
#include <map>
#include <numeric>
#include <omp.h>
#include <random>
#include <regex>
#include <stdio.h>
#include <sstream>
#include <string>
#include <set>
#include <time.h>
#include <thread>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
#include <Windows.h>
#include <pugixml.hpp>using namespace std;// Structure to hold node data
struct NodeData {std::string name;std::unordered_map<std::string, std::string> attributes;std::vector<NodeData> children;std::string text;// 根据节点名获取子节点NodeData* getChildNode(const std::string& nodeName) {for (auto& child : children) {if (child.name == nodeName) {return &child;}}return nullptr; // 未找到匹配的子节点}};// 递归函数,将XML节点转换为NodeData结构体
NodeData parseNode(const pugi::xml_node& xmlNode)
{NodeData nodeData;// 提取节点名称nodeData.name = xmlNode.name();// 提取节点属性for (const auto& attr : xmlNode.attributes()) {nodeData.attributes[attr.name()] = attr.value();}// 提取节点文本nodeData.text = xmlNode.text().get();// 递归处理子节点for (const auto& child : xmlNode.children()) {nodeData.children.push_back(parseNode(child));}return nodeData;
}// 显示
void displayNodeData(const NodeData& node, int depth = 0)
{// Display current nodecout << string(depth * 4, ' ') << "Name: " << node.name << endl;cout << string(depth * 4, ' ') << "Attributes:" << endl;for (const auto& attr : node.attributes){cout << string(depth * 4, ' ') << " " << attr.first << " : " << attr.second << endl;}if (!node.text.empty()){cout << string(depth * 4, ' ') << "Text: " << node.text << endl;}// Display child nodes recursivelyfor (const auto& child : node.children){displayNodeData(child, depth + 1);}
}int main()
{pugi::xml_document doc;pugi::xml_parse_result result = doc.load_file("test.xml");if (!result){std::cerr << "Error: " << result.description() << std::endl;return 1;}// 将根节点转换为结构体NodeData rootNode = parseNode(doc.root());// 显示displayNodeData(rootNode);cout << "end." << endl;return 0;
}
<?xml version="1.0" encoding="UTF-8"?>
<root><person><name>John Doe</name><age>30</age><city>New York</city></person><person><name>Jane Smith</name><age>25</age><city>Los Angeles</city></person>
</root>

已编译好的库
百度云地址:
链接:https://pan.baidu.com/s/14i8kCZqig7ki77d8PHLUjg
提取码:cz0q
PugiXML是我用着比较舒服的库,特此推荐给大家,TinyXML也不错,可惜不支持utf-16。
TinyXML教程:
Windows下编译TinyXML(XML文件解析)-CSDN博客
以上就是“Windows下用CMake编译PugiXML及配置测试”的过程。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!
相关文章:
Windows下用CMake编译PugiXML及配置测试
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 PugiXML是什么? PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口,能够高效地加载…...
python-基础篇-字符串、列表、元祖、字典-列表
文章目录 2.3.2列表2.3.2.1列表介绍2.3.2.1.1列表的格式2.3.2.1.2打印列表 2.3.2.2列表的增删改查2.3.2.2.1列表的遍历2.3.2.2.1.1使用for循环2.3.2.2.1.2使用while循环 2.3.2.2.2添加元素("增"append, extend, insert)2.3.2.2.2.1append 2.3.2.2.2.2extend2.3.2.2.2…...
Qt控件样式设置其一(常见方法及优缺点)
如果你对Qt有基本的了解,应该知道它的一大优点是跨平台,可以在不同的系统中编译运行。但在我看来,Qt还有另外一个优点,就是制作界面比较方便和灵活,能够实现主流静态效果的桌面应用。(如果需要实现比较灵动…...
软件测试(测试用例详解)(三)
1. 测试用例的概念 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合。 测试环境操作步骤测试数据预取结果 测试用例的评价标准: 用例表达清楚,无二义性。。用例可操作性强。用例的输入与输出明确。一条用例只有…...
最优算法100例之33-字符串/数字的排列组合问题
专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 字符串/数字的排列组合问题 void dfs(int deep){if(deep == n){//输出}for(int i = 0; i < n; i++){if(flag[i] == 0){d[d…...
Java面试题:请解释Java中的多线程编程?
Java中的多线程编程允许 concurrently 执行多个线程,从而可以同时执行多个任务,提高程序的效率和响应性。在Java中,线程可以通过以下两种主要方式来实现: 继承 Thread 类实现 Runnable 接口 继承 Thread 类 class MyThread ext…...
acwing算法提高之图论--最小生成树的扩展应用
目录 1 介绍2 训练 1 介绍 本专题用来记录使用最小生成树算法(prim或kruskal)解决的扩展题目。 2 训练 题目1:1146新的开始 C代码如下, #include <iostream> #include <cstring> #include <algorithm>usin…...
政安晨:【Keras机器学习实践要点】(十七)—— 利用 EfficientNet 通过微调进行图像分类
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 本文目标: 使用 EfficientNet 和在图…...
wordpress全站开发指南-面向开发者及深度用户(全中文实操)--php函数
php函数 wordpress会封装一部分函数,比如bloginfo该函数的作用是直接调用你设置的你的网站的名称 示例 This is our amazing custom theme <?php echo 22; function myfirstfunction(){ echo 33; echo "<p>Hello ,this is my first function</…...
Linux 设备驱动管理之内核对象(Kernel Object)机制
Linux 设备驱动管理之内核对象(Kernel Object)机制 Linux内核是一个复杂的系统,它通过一系列的机制和结构体来管理和表示系统中的资源。其中一个关键的概念是“内核对象”(Kernel Object,简称kobject)。本文将深入探讨kobject机制…...
【C语言】关键字选择题
前言 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 前言 关于C语言关键字相关的选择题 题目一: 用在switch语言中的关键字不包含哪个?( ) A .continue B .break C .defa…...
营销中的归因人工智能
Attribution AI in marketing 归因人工智能作为智能服务的一部分,是一种多渠道算法归因服务,根据特定结果计算客户互动的影响和增量影响。有了归因人工智能,营销人员可以通过了解每个客户互动对客户旅程每个阶段的影响来衡量和优化营销和广告…...
ChatGPT 的核心 GPT 模型:探究其生成式预训练变换架构的革新与应用潜力
GPT(Generative Pre-trained Transformer)模型是一种深度学习模型,由OpenAI于2018年首次提出,并在随后的几年中不断迭代发展,包括GPT-2、GPT-3以及最新的GPT-4。GPT模型在自然语言处理(NLP)领域…...
Python | Leetcode Python题解之第10题正则表达式匹配
题目: 题解: class Solution:def isMatch(self, s: str, p: str) -> bool:m, n len(s), len(p)dp [False] * (n1)# 初始化dp[0] Truefor j in range(1, n1):if p[j-1] *:dp[j] dp[j-2]# 状态更新for i in range(1, m1):dp2 [False] * (n1) …...
华大单片机新建工程步骤
1.新建文件夹,比如00_LED 2.拷贝 hc32f460_ddl_Rev2.2.0\driver 到 00_LED 3.拷贝 hc32f460_ddl_Rev2.2.0\mcu\common 到 00_LED 4.拷贝 hc32f460_ddl_Rev2.2.0\example\ev_hc32f460_lqfp100_v2\gpio\gpio_output\source 到 00_LED 5.拷贝 hc32f460_ddl_Rev2.2.…...
设计模式:桥接模式
定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象与实现分离,使它们可以独立地变化。在桥接模式中,抽象部分(Abstraction)包含对实现部分(Implementor)的引用,实现部分可以通过接口中的方法被抽象部分使用,但是具体的实现细节对于抽象部分来说是隐藏的…...
人脸识别:Arcface--loss+code
之前只接触过传统方法的人脸识别算法,本以为基于深度学习的方法会使用对比损失之类的函数进行训练,但是Arcface算法基于softmax进行了创新,本文未深究其详细的loss公式原理,在大致明白其方向下,运行了代码,…...
Linux-程序地址空间
目录 1. 程序地址空间分布 2. 两个问题 3. 虚拟地址和物理地址 4. 页表 5. 解决问题 6. 为什么要有地址空间 1. 程序地址空间分布 测试一下: #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h>int ga…...
adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月
登录adobe stock的官网,点击你想要下载的视频,然后点击免费下载,我们点击免费试用按钮,可以看到非常贵,需要80美金一个月,用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡,就可以白嫖一个…...
Mysql的基本命令
1 服务相关命令 命令描述systemctl status mysql查看MySQL服务的状态systemctl stop mysql停止MySQL服务systemctl start mysql启动MySQL服务systemctl restart mysql重启MySQL服务ps -ef | grep mysql查看mysql的进程mysql -uroot -hlocalhost -p123456登录MySQLhelp显示MySQ…...
云原生任务调度引擎tausik-core:设计、实践与高可用部署
1. 项目概述:一个面向未来的云原生应用核心引擎最近在梳理团队的技术栈,发现一个挺有意思的现象:很多项目在向云原生转型时,总会遇到一个“核心引擎”的选择难题。是直接上Kubernetes全家桶,还是基于某个框架自研&…...
Unity 2D横版闯关游戏:从零到一构建像素风丛林冒险
1. 像素风游戏的前期准备 第一次打开Unity时,看着空荡荡的场景视图,我完全不知道从哪里开始。后来发现,制作2D横版游戏就像搭积木,需要先准备好所有零件。这里分享我制作《丛林法则》时的完整筹备过程。 像素风游戏最迷人的就是那…...
【雕爷学编程】Arduino动手做(1)---干簧管传感器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和各种模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做小实验,不管能否成功,都会记录下来—小小的进步或是搞不掂…...
为什么给 Claude Code 加上 CLAUDE.md 后,它就像换了一个脑子?
我是张大鹏,有十多年 AI 人工智能项目的开发经验,带过不少项目。说实话,最难的不是写代码,是让 AI 真正理解你想要什么。最近给项目加了一份 CLAUDE.md,效果立竿见影——Claude Code 从"莽撞乱撞"变成了&quo…...
OpenArk:Windows系统安全检测的终极完整解决方案指南 [特殊字符]️
OpenArk:Windows系统安全检测的终极完整解决方案指南 🛡️ 【免费下载链接】OpenArk The Next Generation of Anti-Rookit(ARK) tool for Windows. 项目地址: https://gitcode.com/GitHub_Trending/op/OpenArk OpenArk是一款强大的Windows开源反R…...
NeoPixel灯环故障深度修复:从信号完整性到电源设计的嵌入式实践
1. 项目概述:从“小麻烦”到深度修复最近几周,我一直在愉快地捣鼓Adafruit的NeoPixel灯带和灯环,这东西确实好玩,单线控制、全彩可编程,简直是创客项目里的“瑞士军刀”。但就在我准备大干一场,用它们来打造…...
利用Taotoken快速为不同编程语言生成AI调用示例
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken快速为不同编程语言生成AI调用示例 在构建现代应用时,全栈开发者常常需要在前端、后端、CLI工具等多个技术…...
VR文旅大空间|沉浸式体验重塑文旅新场景
随着文旅产业不断升级,传统“走马观花式”的旅游体验已经难以满足游客日益增长的体验需求。如何让游客“留下来、玩得久、愿意分享”,成为各地文旅项目共同思考的问题。在这一背景下,VR大空间文旅逐渐走入大众视野,成为文旅融合发…...
AI智能体开发实战:从框架选型到部署优化的全流程指南
1. 项目概述与核心价值最近在探索AI智能体(AI Agent)和自动化工作流领域时,我反复被一个名字刷屏:AwesomeClaw。这个由CrayBotAGI团队开源的项目,在GitHub上迅速获得了大量关注。乍一看,它像是一个又一个“…...
Windows系统清理终极指南:DriverStore Explorer深度使用教程
Windows系统清理终极指南:DriverStore Explorer深度使用教程 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你的C盘是不是总在不知不觉中变小?系统运行越来越慢…...
