tinyxml2开源库使用

源码下载:GitHub - leethomason/tinyxml2: TinyXML2 is a simple, small, efficient, C++ XML parser that can be easily integrated into other programs.

1.加载tinyxml2库

解压上面现在的压缩包,将tinyxml2.h/tinyxml2.cpp添加到项目工程当中,要使用该库时,只需要使用对于的头文件即可

#include "tinyxml2.h"

2.创建XML文件
int test_tinyxml2_create()
{const char *declaration = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";tinyxml2::XMLDocument doc;tinyxml2::XMLError ret = doc.Parse(declaration);if (ret != 0){fprintf(stderr, "fail to parse xml file: %s\n", declaration);return -1;}tinyxml2::XMLComment *comment = doc.NewComment("this is a xml test file");doc.InsertEndChild(comment);tinyxml2::XMLElement *root = doc.NewElement("Root");doc.InsertEndChild(root);// Usertinyxml2::XMLElement *user = doc.NewElement("User");user->SetAttribute("Name", "fengbingchun");root->InsertEndChild(user);tinyxml2::XMLElement *blog = doc.NewElement("Blog");tinyxml2::XMLText *text1 = doc.NewText("CSDN");blog->InsertEndChild(text1);user->InsertEndChild(blog);tinyxml2::XMLElement *code = doc.NewElement("Code");tinyxml2::XMLText *text2 = doc.NewText("GitHub");code->InsertEndChild(text2);user->InsertEndChild(code);// Blogtinyxml2::XMLElement *blog2 = doc.NewElement("Blog");blog2->SetAttribute("Name", "CSDN");root->InsertEndChild(blog2);tinyxml2::XMLElement *addr = doc.NewElement("Address");tinyxml2::XMLText *text3 = doc.NewText("https://blog.csdn.net/fengbingchun");addr->InsertEndChild(text3);blog2->InsertEndChild(addr);tinyxml2::XMLElement *id = doc.NewElement("ID");tinyxml2::XMLText *text4 = doc.NewText("fengbingchun");id->InsertEndChild(text4);blog2->InsertEndChild(id);// Codetinyxml2::XMLElement *code2 = doc.NewElement("Code");code2->SetAttribute("Name", "GitHub");root->InsertEndChild(code2);tinyxml2::XMLElement *addr2 = doc.NewElement("Address");tinyxml2::XMLText *text5 = doc.NewText("https://github.com//fengbingchun");addr2->InsertEndChild(text5);code2->InsertEndChild(addr2);tinyxml2::XMLElement *repositories = doc.NewElement("Repositories");tinyxml2::XMLText *text6 = doc.NewText("27");repositories->InsertEndChild(text6);code2->InsertEndChild(repositories);#ifdef _MSC_VERconst char *file_name = "E:/GitCode/Messy_Test/testdata/test.xml";
#elseconst char *file_name = "testdata/test.xml";
#endifret = doc.SaveFile(file_name);if (ret != 0){fprintf(stderr, "fail to save xml file: %s\n", file_name);return -1;}return 0;
}

结果:

<?xml version="1.0" encoding="UTF-8"?>
<!--this is a xml test file-->
<Root><User Name="fengbingchun"><Blog>CSDN</Blog><Code>GitHub</Code></User><Blog Name="CSDN"><Address>https://blog.csdn.net/fengbingchun</Address><ID>fengbingchun</ID></Blog><Code Name="GitHub"><Address>https://github.com//fengbingchun</Address><Repositories>27</Repositories></Code>
</Root>
3.解析XML文件
int test_tinyxml2_parse()
{
#ifdef _MSC_VERconst char *file_name = "E:/GitCode/Messy_Test/testdata/test_tinyxml2.xml";
#elseconst char *file_name = "testdata/test_tinyxml2.xml";
#endiftinyxml2::XMLDocument doc;tinyxml2::XMLError ret = doc.LoadFile(file_name);if (ret != 0){fprintf(stderr, "fail to load xml file: %s\n", file_name);return -1;}tinyxml2::XMLElement *root = doc.RootElement();fprintf(stdout, "root element name: %s\n", root->Name());// Usertinyxml2::XMLElement *user = root->FirstChildElement("User");if (!user){fprintf(stderr, "no child element: User\n");return -1;}fprintf(stdout, "user name: %s\n", user->Attribute("Name"));tinyxml2::XMLElement *blog = user->FirstChildElement("Blog");if (!blog){fprintf(stderr, "no child element: Blog, in User\n");return -1;}fprintf(stdout, "blog value: %s\n", blog->GetText());fprintf(stdout, "code value: %s\n\n", user->FirstChildElement("Code")->GetText());// Blogtinyxml2::XMLElement *blog2 = root->FirstChildElement("Blog");if (!blog2){fprintf(stderr, "no child element: Blog\n");return -1;}fprintf(stdout, "blog name: %s\n", blog2->Attribute("Name"));tinyxml2::XMLElement *addr = blog2->FirstChildElement("Address");if (!addr){fprintf(stderr, "no child element: Address, in Blog\n");return -1;}fprintf(stdout, "address value: %s\n", addr->GetText());fprintf(stdout, "id value: %s\n\n", blog2->FirstChildElement("ID")->GetText());// Codetinyxml2::XMLElement *code = root->FirstChildElement("Code");if (!code){fprintf(stderr, "no child element: Code\n");return -1;}fprintf(stdout, "code name: %s\n", code->Attribute("Name"));tinyxml2::XMLElement *addr2 = code->FirstChildElement("Address");if (!addr2){fprintf(stderr, "no child element: Address, in Code\n");return -1;}fprintf(stdout, "address value: %s\n", addr2->GetText());fprintf(stdout, "repositories value: %s\n\n", code->FirstChildElement("Repositories")->GetText());return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript中的垃圾回收机制

一、什么是JavaScript垃圾回收机制 JavaScript中的垃圾回收机制是自动管理内存的一种机制。它负责在程序运行时识别和清除不再使用的内存&#xff0c;以便释放资源并提高性能。 JavaScript中的垃圾回收器会定期扫描内存中的对象&#xff0c;标记那些可达对象和不可达对象。 可达…

公厕智慧化_智慧化的公厕

公厕智慧化是现代城市建设中的重要一环。通过信息化、数字化和智慧化技术手段&#xff0c;实现对公共厕所的高效管理和服务&#xff0c;不仅提升了城市环境质量&#xff0c;还改善了居民生活品质。智慧公厕的智慧化包括监测、管理、服务和设备的智慧化&#xff0c;利用先进科技…

unity-unity2d基础操作笔记(二)0.5.0

unity2d基础操作笔记 五十一、canvas中的必须熟悉的属性五十二、如何调整canvas与游戏人物大小近似大小五十三、canvas中的canvas scaler介绍【概念】五十四、ui scale mode介绍【概念】五十五、为什么创建image后,canvas的范围要要远远大于游戏世界?五十六、图片常用操作【技…

1分钟带你学会Python的pass关键字和range函数

1.pass 关键字 pass关键字在 python 中没有任何实际意义&#xff0c;主要是用来完成占位的操作&#xff0c;保证语句的完整性 age int(input(请输入您的年龄&#xff1a;))if age > 18: pass # pass 在此处没有任何意义&#xff0c;只是占位 print(欢迎光临。。。…

美易官方:巴菲特发布2024年致股东公开信,重磅!

近日&#xff0c;全球投资界的巨擘巴菲特发布了2024年致股东的公开信&#xff0c;引起了广泛关注。作为伯克希尔哈撒韦公司的董事长和首席执行官&#xff0c;巴菲特的信函一直备受投资者们的期待。在这封公开信中&#xff0c;巴菲特分享了关于投资、公司治理和全球经济等方面的…

常见的排序算法整理

1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始&#xff0c;然后依次和剩余的元素进行比较&#xff0c;若小于相邻元素&#xff0c;则交换两者位置&#xff0c;同时将较大元素作为下一个比较的基准元素&#xff0c;继续将该元素与其相邻的元素进行比…

Spring 中 ApplicationContext 和 BeanFactory 的区别有哪些

先看一张类图&#xff1a; 区别&#xff1a; 1&#xff1a;包目录不同&#xff1a; spring-beans.jar 中 org.springframework.beans.factory.BeanFactory spring-context.jar 中 org.springframework.context.ApplicationContext 2&#xff1a;国际化&#xff1a; BeanFacto…

数组详解-格式定义-遍历-求最值-遍历求和-打乱数组中的数据

数组指的是一种容器,可以用来存储同种数据类型的多个值 定义数组格式 : 完整格式-静态初始化 数据类型[]数组名new 数据类型[]{元素1,元素2,元素3...} int[] array new int[]{11,22,33}; 简化格式 int[] array {11,22,33}; 完整格式-动态初始化 初始化时只指定数组长…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…

C++11 Thead线程库的基本使用

文章目录 创建线程传递参数等待线程完成分离线程joinable() 创建线程 要创建线程&#xff0c;我们需要一个可调用的函数或函数对象&#xff0c;作为线程的入口点。在C11中&#xff0c;我们可以使用函数指针、函数对象或lambda表达式来实现。 创建线程的基本语法如下&#xff…

PHP中的飞碟运算符、取反运算符、对比非ASCII字符串、对比浮点数操作

对比浮点数 在电脑里存储的浮点数可能会和输入的值有些许差异&#xff0c;比如输入的是10.0&#xff0c;但存储的是10.00001. 在比较两个浮点数是否相等时可以计算下两个数的差值&#xff0c;然后查看下两数之差是否小于可以接受的阈值&#xff0c;如果要求精度在小数点后5位的…

算法训练day34 Leetcode1005.K次取反后最大化的数组和● 134. 加油站 135. 分发糖果

1005 k次取反后最大化的数组和 题目描述 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回…

ubuntu 22.04LTS的一些使用心得

前言 笔者一直在折腾ubuntu作为开发的主力系统&#xff0c;尤其是最近微信和各种软件陆续支持Debian系列&#xff0c;很多软件都可以用了&#xff0c;当然开源的软件大部分是跨平台的&#xff0c;尤其是idea系列。 X11 OR Wayland 关于X11和wayland&#xff0c;笔者还是使用…

9.5K Star,又一款超棒开源轻量自动化运维平台

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 一个好的运维平台就变得非常重要了&#xff0c;可以节省大量的人力和物…

ElasticSearch索引数据备份与恢复

索引数据备份 在磁盘创建备份目录并授权 # 创建备份目录 /home/esbackup # 授权 chmod 777 /home/esbackup修改配置文件elasticsearch.yml echo path.repo: ["/home/esbackup"] >> /etc/elasticsearch/elasticsearch.yml重启elasticsearch(我是docker创建的…

c++ Qt 网络连接

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

软件工程复习笔记

一、软件工程概述 软件 = 程序 + 数据 + 相关文档 软件危机(Software Crisis) 指由于落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 软件工程三要素 方法、工具、过程 软件工程目标 在给定成本、进度的…

DDS通信协议

DDS&#xff08;Data Distribution Service&#xff09;是一套通信协议和 API 标准&#xff1b;它提供了以数据为中心的连接服务&#xff0c;基于发布者-订阅者模型。这是一套中间件&#xff0c;它提供介于操作系统和应用程序之间的功能&#xff0c;使得组件之间可以互相通信。…

首届Supernova国际青少年模特艺术大赛

2024 全国海选北京站&#xff0c;于 2 月 21 日圆满成功。 # 中国首席超模 # 伍倩 # 超模 # 演员 # 那广子 身着明星挚爱高定礼服 EvaLendel 惊艳亮相。总决赛重磅起航&#xff01;报名从速&#xff01; 整场海选比赛全国进行角逐&#xff0c;有北京、深圳、重庆、新…

LeetCode234.回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true思路 找到链表的中间节点&#xff1a;可以使用快慢指针…