c++xml解析之tinyxml2

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。

TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

不过官方的文档并不是很完善,例子更是不知所云...然后就有了下面的内容。

这里用的是TinyXML2,相比于TinyXML1,它更小,更轻量,内存的使用也更加有效。

    1.配置TinyXML2

这里把项目弄下来,然后解压,我们之需要里面的tinyxml2.h和tinyxml2.cpp,将他们拷到工程目录里面。

2.HelloWorld

在项目中创建test.xml,内容如下:

[html] view
plain
copy

  1. <?xml version="1.0"?>
  2. <Hello>World</Hello>

创建main.cpp

[cpp] view
plain
copy

  1. #include <iostream>
  2. #include"tinyxml2.h"
  3. using namespace std;
  4. using namespace tinyxml2;
  5. void example1()
  6. {
  7. XMLDocument doc;
  8. doc.LoadFile("test.xml");
  9. const char* content= doc.FirstChildElement( "Hello" )->GetText();
  10. printf( "Hello,%s", content );
  11. }
  12. int main()
  13. {
  14. example1();
  15. return 0;
  16. }

编译运行:

3.稍微复杂一些的例子

下面这个例子的场景更可能在工程中遇到,就是在XML中存储一些数据,然后由程序来调用。

[html] view
plain
copy

  1. <?xml version="1.0"?>
  2. <scene name="Depth">
  3. <node type="camera">
  4. <eye>0 10 10</eye>
  5. <front>0 0 -1</front>
  6. <refUp>0 1 0</refUp>
  7. <fov>90</fov>
  8. </node>
  9. <node type="Sphere">
  10. <center>0 10 -10</center>
  11. <radius>10</radius>
  12. </node>
  13. <node type="Plane">
  14. <direction>0 10 -10</direction>
  15. <distance>10</distance>
  16. </node>
  17. </scene>

[cpp] view
plain
copy

  1. #include <iostream>
  2. #include"tinyxml2.h"
  3. using namespace std;
  4. using namespace tinyxml2;
  5. void example2()
  6. {
  7. XMLDocument doc;
  8. doc.LoadFile("test.xml");
  9. XMLElement *scene=doc.RootElement();
  10. XMLElement *surface=scene->FirstChildElement("node");
  11. while (surface)
  12. {
  13. XMLElement *surfaceChild=surface->FirstChildElement();
  14. const char* content;
  15. const XMLAttribute *attributeOfSurface = surface->FirstAttribute();
  16. cout<< attributeOfSurface->Name() << ":" << attributeOfSurface->Value() << endl;
  17. while(surfaceChild)
  18. {
  19. content=surfaceChild->GetText();
  20. surfaceChild=surfaceChild->NextSiblingElement();
  21. cout<<content<<endl;
  22. }
  23. surface=surface->NextSiblingElement();
  24. }
  25. }
  26. int main()
  27. {
  28. example1();
  29. return 0;
  30. }

运行结果

解释一下几个函数:

FirstChildElement(const char* value=0):获取第一个值为value的子节点,value默认值为空,则返回第一个子节点。

RootElement():获取根节点,相当于FirstChildElement的空参数版本;

const XMLAttribute* FirstAttribute() const:获取第一个属性值;

XMLHandle NextSiblingElement( const char* _value=0 ) :获得下一个节点。

c++xml解析之tinyxml2

时间: 2024-10-10 15:43:56

c++xml解析之tinyxml2的相关文章

TinyXML开源XML解析器-TinyXML-2

TinyXML-2 is a simple, small, efficient, C++ XML parser that can be easily integrating into other programs. TinyXML-2 是一个简单.小型.高效的C++ XML解析器,它可以很容易地集成到其他程序. TinyXML-1 served my needs for many years; but it uses memory inefficiently, and doesn't perfo

学习C++版XML解析器tinyxml2

tinyxml2是一个非常好用的C++编写的XML文件解析和生成器,其项目地址为:https://github.com/leethomason/tinyxml2 下面给出常用的API: 主要API: XMLDocument:XML文档类 RootElement():XML文档的root元素 XMLElement:XML元素对象 FirstChildElement():第一个子节点 NextSiblingElement():下一个兄弟节点 XMLAttribute:XML节点属性类 FirstAt

Cocos2d-x xml解析

Cocos2d-x xml解析 Cocos2d-x 已经加入了tinyxml2用于xml的解析.3.0版本位于external/tinyxml2下.2.x版本位于cocos2dx/support/tinyxml2下. tinyxml2 Github地址:https://github.com/leethomason/tinyxml2 帮助文档地址:http://grinninglizard.com/tinyxml2docs/index.html 生成xml文档 引入头文件 #include "ti

Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidjson/wiki:http://code.google.com/p/rapidjson/wiki/UserGuide 下面就通过实例代码讲解rapidjson的用法. 使用rapidjson解析json串 引入头文件 1 2 #include "json/rapidjson.h" #inc

cocos2d-x3.0 XML解析

在2dx3.0中xml解析已经不用自己找库了.已经为我们集成好了. text.xml <?xml version ="1.0" encoding ="UTF8" standalone="yes" ?> <? xml-stylesheet type="text/xsl" href="yxfqust.xsl" ?> <!--下面是一个学生名单--> <student_l

iOS xml解析

iOS xml 解析方法有两种:SAX , DOM. SAX 不用借助第三方,在解析过程中逐行解析.(NSXMLParser,需要实现代理),具体步骤: 1.获取文件路径. 2.创建 NSXMLParser 对象. 3.遵守协议,设置代理. 4.实现代理方法 1>- (void)parserDidStartDocument:  ---- 开始解析 2>- (void)parserDidEndDocument: ----解析结束 3>- (void)parser:didStartEleme

XML解析

3.1 XML简单介绍 (1) XML:可扩展标记语言 a.语法 b.XML文档的三部分(声明.元素和属性) c.其它注意点(注意不能交叉包含.空行换行.XML文档只能有一个根元素等) (2) XML解析 a.XML解析的两种方式 001 SAX:从根元素开始,按顺序一个元素一个元素的往下解析,可用于解析大.小文件 002 DOM:一次性将整个XML文档加载到内存中,适合较小的文件 b.解析XML的工具 001 苹果原生NSXMLParser:使用SAX方式解析,使用简单 002 第三方框架 l

JAVASE02-Unit012: Unit07: XML语法 、 XML解析

Unit07: XML语法 . XML解析 emplist.xml <?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>张三</name> <age>34</age> <gender>男</gender> <salary>3000</salary

iOS -数据库网络之xml解析

XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax) 1.IOS中XML文件获取 首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: //获取xml完整路径 NSString * path=[[NSBundle mainBundle] [email protected]"xml文件名称" ofType:@"xml"]; //读取文件到内存 NSData* data=[NSData dataWithConte