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

Windows下用CMake编译PugiXML及配置测试

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

PugiXML是什么?

       PugiXML 是一个用于解析和操作 XML 文档的 C++ 库。它提供了简单易用的接口,能够高效地加载、解析和修改 XML 数据。PugiXML 的主要特点包括:

  1. 轻量级和高效性: PugiXML 被设计成一个轻量级的库,具有高效的性能。它采用了一种基于指针的数据结构,能够快速地解析和操作 XML 文档。

  2. 简单易用的接口: PugiXML 提供了简单易用的 API,使得 XML 文档的操作变得容易和直观。它采用了类似于 DOM(文档对象模型)的数据结构,允许用户通过节点、属性和文本内容来访问和修改 XML 文档的各个部分。

  3. 跨平台性: PugiXML 被设计成一个跨平台的库,可以在各种操作系统上运行,包括 Windows、Linux 和 macOS 等。

  4. 开源和免费: 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及配置测试

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 PugiXML是什么&#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口&#xff0c;能够高效地加载…...

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有基本的了解&#xff0c;应该知道它的一大优点是跨平台&#xff0c;可以在不同的系统中编译运行。但在我看来&#xff0c;Qt还有另外一个优点&#xff0c;就是制作界面比较方便和灵活&#xff0c;能够实现主流静态效果的桌面应用。&#xff08;如果需要实现比较灵动…...

软件测试(测试用例详解)(三)

1. 测试用例的概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 测试环境操作步骤测试数据预取结果 测试用例的评价标准&#xff1a; 用例表达清楚&#xff0c;无二义性。。用例可操作性强。用例的输入与输出明确。一条用例只有…...

最优算法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 执行多个线程&#xff0c;从而可以同时执行多个任务&#xff0c;提高程序的效率和响应性。在Java中&#xff0c;线程可以通过以下两种主要方式来实现&#xff1a; 继承 Thread 类实现 Runnable 接口 继承 Thread 类 class MyThread ext…...

acwing算法提高之图论--最小生成树的扩展应用

目录 1 介绍2 训练 1 介绍 本专题用来记录使用最小生成树算法&#xff08;prim或kruskal&#xff09;解决的扩展题目。 2 训练 题目1&#xff1a;1146新的开始 C代码如下&#xff0c; #include <iostream> #include <cstring> #include <algorithm>usin…...

政安晨:【Keras机器学习实践要点】(十七)—— 利用 EfficientNet 通过微调进行图像分类

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文目标&#xff1a; 使用 EfficientNet 和在图…...

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--php函数

php函数 wordpress会封装一部分函数&#xff0c;比如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内核是一个复杂的系统&#xff0c;它通过一系列的机制和结构体来管理和表示系统中的资源。其中一个关键的概念是“内核对象”&#xff08;Kernel Object&#xff0c;简称kobject&#xff09;。本文将深入探讨kobject机制…...

【C语言】关键字选择题

前言 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 前言 关于C语言关键字相关的选择题 题目一&#xff1a; 用在switch语言中的关键字不包含哪个&#xff1f;( ) A .continue B .break C .defa…...

营销中的归因人工智能

Attribution AI in marketing 归因人工智能作为智能服务的一部分&#xff0c;是一种多渠道算法归因服务&#xff0c;根据特定结果计算客户互动的影响和增量影响。有了归因人工智能&#xff0c;营销人员可以通过了解每个客户互动对客户旅程每个阶段的影响来衡量和优化营销和广告…...

ChatGPT 的核心 GPT 模型:探究其生成式预训练变换架构的革新与应用潜力

GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型是一种深度学习模型&#xff0c;由OpenAI于2018年首次提出&#xff0c;并在随后的几年中不断迭代发展&#xff0c;包括GPT-2、GPT-3以及最新的GPT-4。GPT模型在自然语言处理&#xff08;NLP&#xff09;领域…...

Python | Leetcode Python题解之第10题正则表达式匹配

题目&#xff1a; 题解&#xff1a; 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.新建文件夹&#xff0c;比如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

之前只接触过传统方法的人脸识别算法&#xff0c;本以为基于深度学习的方法会使用对比损失之类的函数进行训练&#xff0c;但是Arcface算法基于softmax进行了创新&#xff0c;本文未深究其详细的loss公式原理&#xff0c;在大致明白其方向下&#xff0c;运行了代码&#xff0c;…...

Linux-程序地址空间

目录 1. 程序地址空间分布 2. 两个问题 3. 虚拟地址和物理地址 4. 页表 5. 解决问题 6. 为什么要有地址空间 1. 程序地址空间分布 测试一下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h>int ga…...

adobe stock会员开通付费付款订阅充值教程/adobe stock免费白嫖一个月

登录adobe stock的官网&#xff0c;点击你想要下载的视频&#xff0c;然后点击免费下载&#xff0c;我们点击免费试用按钮&#xff0c;可以看到非常贵&#xff0c;需要80美金一个月&#xff0c;用fomepay可以免费白嫖一个月 点击获取一张虚拟信用卡&#xff0c;就可以白嫖一个…...

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…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...