C++:tinyxml的使用
1. 简介
TinyXML2(最新版本)是一个开源的功能齐全的XML解析库 For C++,源码见:github。
2. 开始使用
首先从Github上获得源码,是一个完整的演示工程,我们只需要其中的tinyxml2.cpp和tinyxml2.h,将这两个文件拷贝到新建的VS工程目录下,然后就可以开始使用了,这是方法之一,也可以将源码编译为.lib然后链接到工程中。
然后包含头文件tinyxml2.h,并使用命名空间:using namespace tinyxml2
3. 写XML
#include <iostream>
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
int main()
{
// 新建一个空文档(表示完整的xml)
XMLDocument xmlDoc;
// 新节点
XMLNode * pRoot = xmlDoc.NewElement("Root");
// 插入到xmlDoc的第一个节点(根节点)
xmlDoc.InsertFirstChild(pRoot);
// 新建一个元素
XMLElement *pElement = xmlDoc.NewElement("IntValue");
// 设置该元素(节点)的值
pElement->SetText(10);
// 设置该元素的属性(重载)
pElement->SetAttribute("year", 2017);
pElement->SetAttribute("key", "hello");
// 将该节点添加到pRoot节点下("Root")
pRoot->InsertEndChild(pElement);
// 指向新的节点
pElement = xmlDoc.NewElement("FloatValue");
// 添加到pRoot节点(依次向下添加)
pRoot->InsertEndChild(pElement);
// 新建一个节点
XMLElement *pNewElement = xmlDoc.NewElement("value1");
// 设置节点的值
pNewElement->SetText(1.0);
// 将该节点添加到pElement节点下("FloatValue")
pElement->InsertFirstChild(pNewElement);
// 指向新的节点
pNewElement = xmlDoc.NewElement("value2");
// 设置节点的值
pNewElement->SetText(2.0);
// 将该节点插入到pElement节点下(依次向下添加)
pElement->InsertEndChild(pNewElement);
// 保存文件
XMLError eResult = xmlDoc.SaveFile("test.xml");
if (eResult != XML_SUCCESS)
cout << "error\n";
return 0;
}
结果 test.xml
<Root>
<IntValue year="2017" key="hello">10</IntValue>
<FloatValue>
<value1>1</value1>
<value2>2</value2>
</FloatValue>
</Root>
4. 读取XML
#include <iostream>
#include "tinyxml2.h"
using namespace std;
using namespace tinyxml2;
int main()
{
// 新建一个空文档
XMLDocument xmlDoc;
// 读取指定的xml文件并判断读取是否成功
XMLError eResult = xmlDoc.LoadFile("test.xml");
if (eResult != XML_SUCCESS)
{
cout << "error\n";
return XML_ERROR_FILE_NOT_FOUND;
}
// 获得该文件的第一个节点(根节点)
XMLNode * pRoot = xmlDoc.FirstChild();
if (pRoot == nullptr)
return XML_ERROR_FILE_READ_ERROR;
// 找到该节点中的名字为 "IntValue"的第一个子节点
XMLElement * pElement = pRoot->FirstChildElement("IntValue");
if (pElement == nullptr)
return XML_ERROR_PARSING_ELEMENT;
// 读取子节点的值
int iOutInt;
eResult = pElement->QueryIntText(&iOutInt);
if (eResult != XML_SUCCESS)
return XML_ERROR_PARSING;
else
cout << iOutInt << endl;
// 读取子节点的属性
int iOutYear;
eResult = pElement->QueryIntAttribute("year", &iOutYear);
if (eResult != XML_SUCCESS)
return XML_ERROR_PARSING;
else
cout << iOutYear << endl;
// 获得该子节点的下一个兄弟节点(更深层的节点搜索类似)
XMLElement * nextNode = pElement->NextSiblingElement();
cout << nextNode->Name() << endl;
return 0;
}
运行结果
10
2017
FloatValue
C++:tinyxml的使用的更多相关文章
- C++ tinyXML使用
tinyXML下载: http://sourceforge.net/projects/tinyxml/ 加载到项目: 这六个文件添加到你的c++工程中,分别是tinystr.h.tinystr.cpp ...
- tinyXML的用法
tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- C++库(TinyXML)
C++库(TinyXML) 什么是XML? "当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴.有史以来第一次,这个世界拥有了一种用来结构化文 ...
- tinyXML的用法,用于解析gpx文件
tinyxml是一个开源的C++xml解析工具集,简单.轻量而又高效,所以对于处理xml文件是一个非常不错的选择. 由于它开源,所以可以方便地免费下载,下载地址百度一下很容易找到,这里就不多说了. 下 ...
- tinyxml学习4
tinyXML一款很优秀的操作C++类库,文件不大,但方法很丰富,和apache的Dom4j可以披靡啊!习惯了使用java类库的我看到这么丰富的c++类库,很高兴!它使用很简单,只需要拷贝几个文件到你 ...
- tinyxml学习5
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- tinyxml学习一
在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. ...
- tinyxml学习2
在TinyXML中,根据XML的各种元素来定义了一些类: TiXmlBase:整个TinyXML模型的基类. TiXmlAttribute:对应于XML中的元素的属性. TiXmlNode:对应于DO ...
- TinyXML:一个优秀的C++ XML解析器
//-------------------------------------------------------------------------------------------------- ...
随机推荐
- spring boot 引导
链接:https://www.zhihu.com/question/39483566/answer/243413600 Spring Boot 的优点快速开发,特别适合构建微服务系统,另外给我们封装了 ...
- HTTPS原理解析-转
这篇文章关于Https的讲解真的是太透彻了,转过来备忘. 来源:腾讯bugly 另附两个SSL/TLS的交互详解:一.二 基于此文章的学习总结:下一篇文章 1.HTTPS 基础 HTTPS(Secur ...
- GYM - 101490 J Programming Tutors (匈牙利+二分)
题意:有N个学生和N个老师,每个人都有自己的坐标X,Y,给每个学生匹配一个老师,要求N个匹配中的距离最大值最小.其中距离的定义为:|X − X’| + |Y − Y ‘|. 分析:一道典型的最大值最小 ...
- Java中的JDBC是什么?
JDBC(Java Data Base Connectivity, Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它有一组用Java语言编写的类和接 ...
- js经典面试问题:如何让for循环中的setTimeout()函数像预想中一样工作?
setTimeout()是js中的一类重要函数,将一段代码延迟一定时间并异步执行.但是这个函数经常不听话.在实践中,可能经常有人碰到类似下面的这种情况: for (var i = 1; i <= ...
- JS正则表达式从入门到入土(10)—— 字符串对象方法
字符串对象方法 search方法 String.prototype.search(reg) search方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,方法返回第一个匹配结果的 ...
- Zabbix 触发器函数方法整理
函数介绍 abschange 参数:忽略 支持类型:float,int,str,text,log 作用:返回最近获得的值与之前获得值差的绝对值,对于字符串类型:0表示相等,1表示不同 avg 参数:秒 ...
- Git与TortoiseGit使用方法
下载这两个工具 Git地址:https://git-for-windows.github.io/ TortoiseGit地址:http://tortoisegit.org/ 点击 ...
- MySQL的索引是什么?怎么优化?
索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.My ...
- spring手动配置
本文总结自:https://www.cnblogs.com/V1haoge/p/7183408.html SpringBoot中免除了大部分配置,但是对于一些特定的情况,还是需要我们进行手动配置的. ...