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解析器
//-------------------------------------------------------------------------------------------------- ...
随机推荐
- Django 分页查询并返回jsons数据,中文乱码解决方法
Django 分页查询并返回jsons数据,中文乱码解决方法 一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF- ...
- 【转】使用DataConnectionDialog在运行时设置数据源连接字符串
介绍: DataConnectionDialog 类: 打开“数据连接”对话框,获取用户选择的数据连接信息. 命名空间为:Microsoft.Data.ConnectionUI 所在程序集:Micro ...
- vue下载文件
import fileDownload from 'js-file-download' let params = { ", ", "filename":&quo ...
- session与cookie的详解
在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...
- 《Java入门第三季》第一章 异常与异常处理
Java异常简介 1.Java异常的体系结构.万恶之源Throwable以及它的两个大儿子Mr.Error(程序终结者)和Mr.Exception(有大量儿子,包括不受查的RuntimeExcepti ...
- linux 登录数据库
-h 地址 (例如:127.0.0.1,localhost) mysql -h 127.0.0.1 -u root -p
- nmap与Nessus扫描特定靶机分析
打开装载Metasploitable2虚拟机的靶机,并获取靶机ip: 使用nmap+ip初步扫描靶机 PORT为端口,STATE为端口开放状态,SERVICE为端口的提供的服务.靶机的MAC地址为: ...
- USB详解
USB作为一种串行接口,应用日益广泛.如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握USB.但是USB的接口协议实在有点费解,Linux UCHI驱动作者之一Alan St ...
- 通过Excel生成批量SQL语句
项目中有时会遇到这样的要求:用户给发过来一些数据,要我们直接给存放到数据库里面,有的是Insert,有的是Update等等,少量的数据我们可以采取最原始的办法,也就是在SQL里面用Insert int ...
- cygwin下烧写文件到sd卡中
在cygwin下将firmware_sdcard.bin写入到sd卡中(cygwin需要以管理员身份启动) 1查看sd分区情况 cat /proc/partitions (为了找到sd卡的标记) 2 ...