【Cocos2d-x游戏引擎开发笔记(25)】XML解析

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
XML是一种非常重要的文件格式,由于C++对XML的支持非常完善,Cocos2d-x选择XML作为主要的文件存储格式。在Cocos2d-x中集成了libxml2来解析XML数据。

 

定义一个用于解析的类,这个类继承CCSAXDelegator和CCObject,然后实现CCSAXDelegator的纯虚函数。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef XMLANALYSIS_H_H
#define XMLANALYSIS_H_H
#include "cocos2d.h"
#include <string>
using namespace cocos2d;
using namespace std;
class XMLAnalysis: public CCSAXDelegator, public CCObject //继承CCSAXDelegator,覆盖纯虚函数
{
public :
     XMLAnalysis( const char * data,unsigned int length); //解析数据
     XMLAnalysis( const char * filename);                    //解析文件
     ~XMLAnalysis( void );
     virtual void startElement( void *ctx, const char *name, const char **atts); //开始标签
     virtual void endElement( void *ctx, const char *name);                     //标签结束
     virtual void textHandler( void *ctx, const char *s, int len);              //标签的内容
     string rootname;
};
#endif


源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "XMLAnalysis.h"
 
 
XMLAnalysis::XMLAnalysis( const char * data,unsigned int length)
{
     CCSAXParser parser;           //定义解析
     if (parser.init( "UTF-8" )==0)   //不是utf-8就不解析了
     {
         CCLog( "please use utf-8" );
         return ;
     }
     parser.setDelegator( this );   //设置解析的对象,这样就会调用解析的方法
     parser.parse(data,length);
}
XMLAnalysis::XMLAnalysis( const char * filename)
{
     CCSAXParser parser;
     if (parser.init( "UTF-8" )==0)
     {
         CCLog( "please use utf-8" );
         return ;
     }
     parser.setDelegator( this );
     parser.parse(filename);
}
 
 
XMLAnalysis::~XMLAnalysis( void )
{
     
}
void XMLAnalysis::startElement( void *ctx, const char *name, const char **atts)
{
     
     if ( strcmp (name, "root" ))
     {
     rootname=name;
     }
}
void XMLAnalysis::textHandler( void *ctx, const char *s, int len)
{
     string str=string(s,0,len);
     
     if (rootname!= "" )
     {
         CCLog( "%s" ,str.c_str());   
     }
}
 
void XMLAnalysis::endElement( void *ctx, const char *name)
{
     
     rootname= "" ;
}


这样每次就打印出标签的内容。

下面使用CURL联网,从网络获取XML来解析,至于CURL联网的配置,请查看我的上一篇文章【Cocos2d-x游戏引擎开发笔记(24)】CURL实现get和post联网。定义一个静态变量std::string str;用于保存网络数据

1
static string str;


在源文件中:

1
std::string HelloWorld::str;


在按钮的点击事件中,开始联网:

1
2
3
4
5
6
7
8
9
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
     str= "" ;
     //usePost();
     useGet();
     XMLAnalysis *p= new XMLAnalysis(str.c_str(), strlen (str.c_str())); //解析数据
     //XMLAnalysis *p=new XMLAnalysis("xmltemp.xml");                //解析文件
     delete p;
}


这里联网是阻塞的,所以调用useGet之后,全部数据获得之后才开始解析的。下面是useGet的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void HelloWorld::useGet()
{
     CURL *curl;
     CURLcode res;
     
     curl=curl_easy_init();
     if (curl)
     {
         curl_easy_setopt(curl,CURLOPT_URL, "http://dota.uuu9.com/rss.xml" );
         curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writehtml);
         res=curl_easy_perform(curl);
         if (res!=CURLE_OK)
         {
             CCLog( "联网超时 %i" ,res);
         }
         
         curl_easy_cleanup(curl);
     }
     else
     {
         CCLog( "curl is null" );
         return ;
     }
}


在writehtml函数中,将返回的数据全部保存到str中

1
2
3
4
5
6
7
8
9
10
11
12
size_t HelloWorld::writehtml(uint8_t* ptr, size_t size, size_t number, void *stream)
{
     char * buffer= new char [16*1024+1];
     memset (buffer,0,16*1024+1);
     sprintf (buffer, "%s" ,ptr);
     CCLog( "data length is %d" , strlen (buffer));
     CCLog( "size*number is %i" ,size*number);
     //CCLog("%s",ptr);
     str=str+buffer;
     delete []buffer;
     return size*number; //这里一定要放回实际返回的字节数
}


这里我测试过,最大返回16k的数据,C Style字符串规定,最后一个字节是,所以多出一个字节存放。下面是从游久返回的数据,已经全部解析出来了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
DOTA
专题站 - 游久(U9)网 -DOTA6.66 - DOTA6.67 - DOTA6.66B - AI - DOTA - 地图下载
http: //dota.uuu9.com/
最专业的DOTA专题站,提供最全面最新的地图下载,大型英雄专题,英雄模拟器,录像,战报,攻略。最新,最快,最全,一切尽在DOTA.UUU9.COM
zh-CN
http: //dota.uuu9.com/rss.xml
 
    
[视频] 小满食尸鬼:笑容如何从脸上消失的
http: //dota.uuu9.com/201306/101447.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-19 9:23:24
http: //dota.uuu9.com/201306/101447.shtml
 
    
[视频] 黑曼巴出品:曼巴时刻top10第十二弹
http: //dota.uuu9.com/201306/101446.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-19 9:17:19
http: //dota.uuu9.com/201306/101446.shtml
 
    
[视频] 凯文教你打Carry:团战之王 幽鬼
http: //dota.uuu9.com/201306/101445.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-19 9:07:31
http: //dota.uuu9.com/201306/101445.shtml
 
    
[视频] WGT现场pis采访:暂不考虑征战DOTA2
http: //dota.uuu9.com/201306/101444.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 18:49:37
http: //dota.uuu9.com/201306/101444.shtml
 
    
[视频] Ks夫妻二人套路黑:拍拍与lion的故事
http: //dota.uuu9.com/201306/101443.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 18:25:39
http: //dota.uuu9.com/201306/101443.shtml
 
    
[视频] 抱抱熊出品:DOTA意识流特比拼VOL.38
http: //dota.uuu9.com/201306/101438.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 17:02:51
http: //dota.uuu9.com/201306/101438.shtml
 
    
[视频] 丶没有bi要出品:操作集锦 第六期
http: //dota.uuu9.com/201306/101434.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 11:15:52
http: //dota.uuu9.com/201306/101434.shtml
 
    
[视频] 抱抱熊出品:DOTA集锦每周TOP7第55期
http: //dota.uuu9.com/201306/101433.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 11:02:16
http: //dota.uuu9.com/201306/101433.shtml
 
    
[视频] ECL小组赛:Orange vs Rstars回顾
http: //dota2.uuu9.com/201306/446153.shtml
 
2013-6-18 10:36:35
http: //dota2.uuu9.com/201306/446153.shtml
 
    
[视频] 专访GTL西北赛区线下赛嘉宾ZSMJ
http: //dota2.uuu9.com/201306/446152.shtml
 
2013-6-18 10:11:22
http: //dota2.uuu9.com/201306/446152.shtml
 
    
[视频] Alienware Cup LGD vs DK两场回顾
http: //dota2.uuu9.com/201306/446139.shtml
 
2013-6-18 9:45:41
http: //dota2.uuu9.com/201306/446139.shtml
 
    
[视频] 游久DOTA精彩集锦第一期:影魔时刻
http: //dota.uuu9.com/201306/101427.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-18 8:43:42
http: //dota.uuu9.com/201306/101427.shtml
 
    
[图赏] WGT颁奖图赏 Pis,Maybe高举奖杯
http: //dota.uuu9.com/201306/101425.shtml
 
2013-6-17 17:15:49
http: //dota.uuu9.com/201306/101425.shtml
 
    
[视频] 牛蛙DOTA1/2拍拍熊:超神霸气的杀戮
http: //dota.uuu9.com/201306/101423.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 15:45:31
http: //dota.uuu9.com/201306/101423.shtml
 
    
[视频] 水友制作娱乐视频:蛋疼镜头集锦124期
http: //dota.uuu9.com/201306/101419.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 14:54:53
http: //dota.uuu9.com/201306/101419.shtml
 
    
[视频] ZEAM出品教父制作:捣塔冷笑话第五弹
http: //dota.uuu9.com/201306/101417.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 14:41:16
http: //dota.uuu9.com/201306/101417.shtml
 
    
[视频] 浅雪dota:教大家打先手(纯属娱乐)
http: //dota.uuu9.com/201306/101421.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 12:15:43
http: //dota.uuu9.com/201306/101421.shtml
 
    
[视频] WGT总决赛Greedy战胜LJBF视频回顾
http: //dota.uuu9.com/201306/101413.shtml
WGT线下赛总决赛 Greedy VS LJBF
2013-6-17 11:45:02
http: //dota.uuu9.com/201306/101413.shtml
 
    
[视频] 彩笔制作:DOTA反杀集锦Top10第64期
http: //dota.uuu9.com/201306/101412.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 11:31:17
http: //dota.uuu9.com/201306/101412.shtml
 
    
[视频] DotA搞笑视频:论演员自我修养第五期
http: //dota.uuu9.com/201306/101411.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 11:05:58
http: //dota.uuu9.com/201306/101411.shtml
 
    
[视频] 每周DOTA搞笑镜头:FunnyTOP10第78期
http: //dota.uuu9.com/201306/101410.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 10:57:31
http: //dota.uuu9.com/201306/101410.shtml
 
    
[视频] 小乖第一视角:酣畅淋漓的影魔二连发
http: //dota.uuu9.com/201306/101409.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 9:42:07
http: //dota.uuu9.com/201306/101409.shtml
 
    
[视频] Nada从顶单排10:中单巫医与中单流浪
http: //dota.uuu9.com/201306/101408.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-17 9:33:45
http: //dota.uuu9.com/201306/101408.shtml
 
    
[视频] P神怒秀sf WGT胜者组Greedy vs PMM
http: //dota.uuu9.com/201306/101402.shtml
WGT胜者组决赛Greedy vs PMM视频回顾
2013-6-16 12:32:10
http: //dota.uuu9.com/201306/101402.shtml
 
    
[视频] 满楼水平第一视角:跳刀沙王就是干
http: //dota.uuu9.com/201306/101405.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-16 12:28:48
http: //dota.uuu9.com/201306/101405.shtml
 
    
[视频] ks从1800单排9-11:火女,女王,毒狗
http: //dota.uuu9.com/201306/101404.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-16 12:22:02
http: //dota.uuu9.com/201306/101404.shtml
 
    
[视频] 直播回顾 浅浅打野斧王第一视角
http: //dota.uuu9.com/201306/101401.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-16 11:54:02
http: //dota.uuu9.com/201306/101401.shtml
 
    
[视频] DOTA直播回顾:天使焦先知第一视角
http: //dota.uuu9.com/201306/101400.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-16 11:48:13
http: //dota.uuu9.com/201306/101400.shtml
 
    
[图赏] WGT2013现场图赏 PIS再战职业首秀
http: //dota.uuu9.com/201306/101393.shtml
 
2013-6-15 14:30:08
http: //dota.uuu9.com/201306/101393.shtml
 
    
[视频] 小满鱼人第一视角:重回高手房匹配
http: //dota.uuu9.com/201306/101392.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-15 13:14:32
http: //dota.uuu9.com/201306/101392.shtml
 
    
[视频] 舞儿蓝猫第一视角:劣势局飘逸逆袭
http: //dota.uuu9.com/201306/101391.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-15 13:09:42
http: //dota.uuu9.com/201306/101391.shtml
 
    
[视频] 凯文教你打Carry:4V5的翻盘小黑
http: //dota.uuu9.com/201306/101385.shtml
您还没有安装flash播放器,请点击这里安装
2013-6-15 0:43:04
http: //dota.uuu9.com/201306/101385.shtml
 
    
[视频] Ks从1800单排7-8:老虎,先知无剧透
http: //dota.uuu9.com/201306/101382.shtml
您还没有安装flash播放器,请点击这里安装
2013-6
Cocos2d-x与Lua融合开发实战项目详解 尽管tolua++支持全自动绑定,但在大型项目中往往需要精细控制哪些类/方法应被暴露,以及如何修改默认行为。这就依赖于.pkg配置文件和自定义宏指令。排除不需要的方法使用%ignore忽略特定函数:pkg重命名方法以符合Lua习惯利用%rename修改Lua端名称:pkg注入自定义逻辑在调用前后插入代码块:pkg%{%}支持可变参数函数绑定对于类型函数,需特殊处理:pkg。 阅读详情

相关推荐

Cocos2D-X瓦片地图开发实战学习笔记

Cocos2D-X 是一款基于 C++ 的开源、跨平台 2D 游戏引擎,广泛应用于移动游戏、教育类应用及交互式多媒体项目开发。其采用 OpenGL ES 进行渲染,具备高性能图形处理能力,并支持 iOS、Android、Windows、macOS 等多平台一键发布,极大提升了开发效率。引擎采用分层架构设计,包含SceneLayerSpriteAction等核心类,便于组织复杂的游戏逻辑。尤其在 2D 地图系统方面,Cocos2D-X 内置了对TMX 格式瓦片地图的完整支持,通过。

weixin_35794316的博客 754

cocos2dx 解析XML文件

cocos2dx中实现XML文件的解析

Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

Cocos2d-x 游戏资源(图片、XML、TXT等)打包加密 之 解密读取

游戏配置之XML

<br />游戏开发中配置文件主要有ini个xmlxml用的更多些。<br />我用的较多的库是tinyXML,一般应用已足矣胜任,网上教程一大堆,就不写了。再次介绍另一个xml库,转载的其他人的blog的文章。<br />目前我公司开发的Nexus Engine的底层对象序列化使用了TinyXML来读写XML文件。TinyXML有两个不爽的地方,一是它的接口使用FILE*,另外一个是它对 wchar_t不能很好的支持。前阵子看Boost库的更新中多了一个PropertyTree,他在处理XML时用

2745

cocos creator:xmlbuilder:创建复杂的XML文件,node-xlsx:创建复杂的excel 文件

xmlbuilder:创建复杂的XML文件,node-xlsx:创建复杂的excel 文件

qq_33302509的博客 938

Cocos2d-x中使用XML实例讲解

XML即可扩展标记语言,在游戏开发中,常用于保存游戏信息,如最高分,游戏等级,等信息,和描述一些资源等,我第一次使用XML是在《使用CCAnimation创建动画》中,使用plist文件加载动画时,使用XML文件其中plist文件其实就是一个XML文件,在Cocos2d-x中使用瓦片地图(一)和在Cocos2d-x中使用瓦片地图(二)中使用瓦片地图编辑器创建的瓦片地图保存后会得到一个tmx格式的文件,tmx文件也是一个XML文件。 XML文件还可以解决中文乱码的问题,Cocos2d-X中出现中文编码乱码

翻肚鱼儿的博客 711

[Cocos2d-x] 使用TinyXml 解析XML文件

在做开发的时候,经常会使用XML的情况,在使用XML的时候,很多情况下会解析XML,那么我们来看一下在cocos2d-x中如何使用TinnyXML解析XML文件获取到我们需要的数据! 废话不多说,先看看例子XML的格式和内容: 我们需要做到的就是获取里面level和data的信息,好,看我们该如何解析! 首先来看看在Cocos2d-x中如何将xml文件读到内存中:

JiuJie_的专栏 5031

cocos2d-x3.0 读xml和读plist的两种方式

这个资源包提供了两个类,这两个类分别可以读取plist的文件和xml的文件,对文件中的字段进行了验证,并且把文件的数据存放在map中,对外提供接口。 所用的版本是cocos2d-x 3.0 bate版本,代码中有用到 CPubFun::系列的函数,是自己封装的,用可以可以用c++基本的函数来替换。

cocos2d-x 解析XML

cocos2d-x android 解析XML出错要怎么解决呢,下面我来分享一下我再做项目的时候遇到的这个问题是如何解决的,废话不多说,我们直接开始吧。 1.使用iconv,引擎也提供了这个库,不过只是win32平台,移植到android上还得自己去下载iconv库编译2.把字符串写到xml...

chouchangzai0969的博客 219

Cocos2d-x游戏引擎入门:从核心概念到实战开发解析

游戏引擎是现代游戏开发的核心工具,它通过封装底层图形渲染、物理模拟、音频处理等复杂系统,为开发者提供高效的创作框架。其工作原理基于场景图管理、资源调度和事件驱动机制,旨在降低开发门槛并提升跨平台部署能力。在技术价值层面,优秀的引擎能显著优化性能、简化工作流,并支持快速迭代。尤其在2D游戏和移动端领域,对轻量级、高性能解决方案的需求持续增长。Cocos2d-x作为一款经典的C++开源跨平台引擎,凭借其开源免费、社区活跃的特性,在移动游戏开发中占据重要生态位。它通过场景、节点、精灵、动作等核心模块,帮助开发者高

weixin_33698043的博客 404

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的用法。 使用rap...

dianbiao4727的博客 126

Cocos2d-x学习笔记(十三)—— 数据解析(json/xml

在我们获取网络数据时,基本上使用的都是xml以及json,因此学习对这两种数据进行解析,对我们有很大的帮助。 下面是代码: HelloParse.h: #ifndef __HELLOPARSE_H__ #define __HELLOPARSE_H__ #include "cocos2d.h" using namespace cocos2d; class HelloParse : p

u013707014的博客 1853

Cocos2d-x游戏中默认的AndroidManifest.xml解析

<!-- xmlns:android="http://schemas.android.com/apk/res/android" 命名空间 package="com.cocos2dx.TestJNI" 包名 android:versionCode="1" 版本代号,内部使用,如程序内部版本识别 android:versionName="1.0" 版本名,对外公布,如下载app到手机时用户可以

kingabcde的专栏 1335

AndEngine与Cocos2d-x深度对比:2D游戏引擎选型实战指南

在移动游戏开发中,游戏引擎是构建项目的核心框架,其架构设计直接决定了开发效率与最终性能表现。引擎通过封装底层图形API(如OpenGL ES)和提供场景管理、物理模拟等模块,简化了游戏开发流程。理解引擎的渲染原理、内存管理机制和跨平台实现方式,对于优化游戏性能、避免常见问题(如Cocos2d游戏黑屏)至关重要。从技术价值看,合适的引擎能降低开发成本,提升代码可维护性,并保障项目长期稳定运行。在2D手游、微信小游戏等应用场景中,开发者常面临在轻量级原生引擎与功能丰富的跨平台引擎间的抉择。本文聚焦于AndEng

weixin_33675507的博客 372
上一篇: Windows下OpenSSL安装配置
下一篇: 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!
linking530
博客等级 码龄17年 72粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值