安徽合肥网站制作公司,手机怎么免费建网站,杭州的网站建设公司有哪些,商城网站源代码作者#xff1a;翟天保Steven 版权声明#xff1a;著作权归作者所有#xff0c;商业转载请联系作者获得授权#xff0c;非商业转载请注明出处
PugiXML是什么#xff1f; PugiXML 是一个用于解析和操作 XML 文档的 C 库。它提供了简单易用的接口#xff0c;能够高效地加载…作者翟天保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后,按WinR打开运行,输入cmd打开命令运行窗,输入cmake-gui,中间无空格,会出现cmake界面。source输入PugiXML的文件路径,build可以在其路径下创建个build文件夹,如下图所示。勾选advanced。 4点击configure配置我是vs2017 x64点确定就开始运行了。 5configure第一次后应该要进行一次配置。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.hppusing namespace std;// Structure to hold node data
struct NodeData {std::string name;std::unordered_mapstd::string, std::string attributes;std::vectorNodeData 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 version1.0 encodingUTF-8?
rootpersonnameJohn Doe/nameage30/agecityNew York/city/personpersonnameJane Smith/nameage25/agecityLos Angeles/city/person
/root已编译好的库
百度云地址
链接https://pan.baidu.com/s/14i8kCZqig7ki77d8PHLUjg 提取码cz0q PugiXML是我用着比较舒服的库特此推荐给大家TinyXML也不错可惜不支持utf-16。
TinyXML教程
Windows下编译TinyXMLXML文件解析-CSDN博客 以上就是“Windows下用CMake编译PugiXML及配置测试”的过程。 如果文章帮助到你了可以点个赞让我知道我会很快乐~加油