《转》 在C++中使用TinyXML2解析xml
读取和设置xml配置文件是最经常使用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,由于它的API接口和Java的十分类似。面向对象性非常好。
TinyXML是一个开源的解析XML的解析库,可以用于C++,可以在Windows或Linux中编译。这个解析库的模型通过解析XML文件。然后在内存中生成DOM模型。从而让我们非常方便的遍历这棵XML树。
DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包括关系。
只是官方的文档并非非常完好。样例更是不知所云...然后就有了以下的内容。
这里用的是TinyXML2,相比于TinyXML1,它更小,更轻量,内存的使用也更加有效。
1.配置TinyXML2
去这里把项目弄下来。然后解压,我们之须要里面的tinyxml2.h和tinyxml2.cpp,将他们拷到project文件夹里面。
2.HelloWorld
在项目中创建test.xml,内容例如以下:
- <?xml version="1.0"?>
- <Hello>World</Hello>
创建main.cpp
- #include <iostream>
- #include"tinyxml2.h"
- using namespace std;
- using namespace tinyxml2;
- void example1()
- {
- XMLDocument doc;
- doc.LoadFile("test.xml");
- const char* content= doc.FirstChildElement( "Hello" )->GetText();
- printf( "Hello,%s", content );
- }
- int main()
- {
- example1();
- return 0;
- }
编译执行:

3.略微复杂一些的样例
以下这个样例的场景更可能在project中遇到,就是在XML中存储一些数据。然后由程序来调用。
- <?xml version="1.0"?
>
- <scene name="Depth">
- <node type="camera">
- <eye>0 10 10</eye>
- <front>0 0 -1</front>
- <refUp>0 1 0</refUp>
- </fov>
- </node>
- <node type="Sphere">
- <center>0 10 -10</center>
- </radius>
- </node>
- <node type="Plane">
- <direction>0 10 -10</direction>
- </distance>
- </node>
- </scene>
- #include <iostream>
- #include"tinyxml2.h"
- using namespace std;
- using namespace tinyxml2;
- void example2()
- {
- XMLDocument doc;
- doc.LoadFile("test.xml");
- XMLElement *scene=doc.RootElement();
- XMLElement *surface=scene->FirstChildElement("node");
- while (surface)
- {
- XMLElement *surfaceChild=surface->FirstChildElement();
- const char* content;
- const XMLAttribute *attributeOfSurface = surface->FirstAttribute();
- cout<< attributeOfSurface->Name() << ":" << attributeOfSurface->Value() << endl;
- while(surfaceChild)
- {
- content=surfaceChild->GetText();
- surfaceChild=surfaceChild->NextSiblingElement();
- cout<<content<<endl;
- }
- surface=surface->NextSiblingElement();
- }
- }
- int main()
- {
- example1();
- return 0;
- }
执行结果

解释一下几个函数:
FirstChildElement(const char* value=0):获取第一个值为value的子节点。value默认值为空,则返回第一个子节点。
RootElement():获取根节点,相当于FirstChildElement的空參数版本号。
const XMLAttribute* FirstAttribute() const:获取第一个属性值。
XMLHandle NextSiblingElement( const char* _value=0 ) :获得下一个节点。
《转》 在C++中使用TinyXML2解析xml的更多相关文章
- java中采用dom4j解析xml文件
一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...
- 转:在java中使用dom4j解析xml
JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- Python中使用ElementTree解析xml
在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...
- windows phone中三种解析XML的方法
需求如下, 项目需要将一段xml字符串中的信息提取出来 <?xml version=""1.0"" encoding=""UTF-8& ...
- java中利用dom4j解析XML文件
官网下载Dom4j地址:https://dom4j.github.io/ 注意:使用Dom4j开发,需下载dom4j相应的jar文件 题目:后台利用dom4j解析student.xml文件,并返回Li ...
- Qt中三种解析xml的方式
在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...
- Qt中使用DOM解析XML文件或者字符串二(实例)
介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...
- iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)
iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论 ...
随机推荐
- SQLServer存储引擎——06.索引的遍历与维护
一.遍历 索引树的每个节点都是一个页面. 索引树有三种类型的节点:根节点.中间节点.叶子节点. (1) 根节点与中间节点一样,只包含下一层节点的入口值与入口指针,它们称为索引节点: (2) 叶子节点包 ...
- 【转】Unity5.x发布IOS项目Xcode8免签证调试发布教程
http://www.jianshu.com/p/b0fb49fbcc14 最近尝试发布一下IOS项目,发现现在发布已经简单很多了,不需要开发者账户也能简单快捷进行真机调试. 调试: 1.准备工作①硬 ...
- 201621123034 《Java程序设计》第4周学习总结
Week04-面向对象设计与继承 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:对象.重载.继承.多态 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需 ...
- Vue2.0 - 构造器的延伸 Vue.extend
Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器.经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元 ...
- 1 - Django安装
一.Python安装 在Mac系统下,系统自带python开发环境,打开终端,输入python,我们就可以看到当前python版本号,例如我的系统是OS X EI Caption 10.11.1,自带 ...
- APK包与类更改分析
360APK包与类更改分析 1 题目要求 这是360的全球招募无线攻防中的第二题,题目要求如下: 1)请以重打包的形式将qihootest2.apk的程序包名改为 "com.qihoo.cr ...
- shell 条件表达式
1.条件测试的常用语法如下 1.test 测试表达式 2.[ 测试表达式 ] #两边需要有空格 3.[[ 测试表达式 ]] 4.(( 测试表达式 )) 说明: 第一种和第二种是等价的,第三种是扩展的t ...
- 两个Vue Demo
1 实现 person list <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- hosts修改备份
# Modified hosts start # Armorgames Start 93.184.220.39 cache.armorgames.com 93.184.220.39 gamemedia ...
- 幸运数字(bzoj 1853)
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”! ...