cocos2d-x 中 xml 文件读取
实现类 CXmlParse
啥也不说了 直接上硬货 believe yourself 一看就明白
CXmlParse.h
#ifndef __C_XML_PARSE__
#define __C_XML_PARSE__ #include "cocos2d.h" using namespace cocos2d; class CXmlParse : public CCObject , public CCSAXDelegator
{
public:
CXmlParse(void);
~CXmlParse(void); static CXmlParse* parseWithFile(const char* tmxFile);
bool initXmlParse(const char* xmlname); std::string root_name;
bool isJumpHeadData;
//用于记录所有数据
std::vector<std::string> allData; //使用CCSAXDelegator 重写3个回调函数
void startElement(void *ctx, const char *name, const char **atts);
void endElement(void *ctx, const char *name);
void textHandler(void *ctx, const char *s, int len); private:
//用来记录每个key前字段
std::string startXmlElement;
//用来记录每个key后字段
std::string endXmlElement;
//记录每个value的值
std::string currString;
};
#endif //__C_XML_PARSE__
CXmlParse.cpp
#include "XmlParse.h" CXmlParse::CXmlParse(void)
{
} CXmlParse::~CXmlParse(void)
{
for (int i=; i<allData.size(); ++i)
{
allData[i].clear();
}
allData.clear();
} CXmlParse* CXmlParse::parseWithFile( const char* tmxFile )
{
CXmlParse* pRet = new CXmlParse();
if(pRet->initXmlParse(tmxFile))
{
pRet->autorelease();
return pRet;
}
CC_SAFE_DELETE(pRet);
return NULL;
} bool CXmlParse::initXmlParse( const char* xmlname )
{
isJumpHeadData = false;
CCSAXParser _par;
if(false == _par.init("UTF-8"))
{
CCLog("请使用utf-8格式!");
return false;
}
_par.setDelegator(this);
//获取文件的完整相对路径
std::string _path = CCFileUtils::sharedFileUtils()->fullPathForFilename(xmlname);
return _par.parse(_path.c_str());
} //开始解析时回调
void CXmlParse::startElement( void *ctx, const char *name, const char **atts )
{
CC_UNUSED_PARAM(ctx); startXmlElement = (char*)name;
if (!isJumpHeadData)
{
//跳过数据头
CCLog("-----------跳过 root name");
isJumpHeadData = true;
root_name = startXmlElement;
return;
}
} //结束解析回调
void CXmlParse::endElement( void *ctx, const char *name )
{
CC_UNUSED_PARAM(ctx); endXmlElement = (char*)name;
if (endXmlElement==root_name)
{
//数据尾
CCLog("读取 xml 结束");
isJumpHeadData = false;
root_name = "";
return;
}
} //键值对的结束字段
void CXmlParse::textHandler( void *ctx, const char *s, int len )
{
CC_UNUSED_PARAM(ctx); currString = std::string((char*)s,,len); CCString* ccStr = new CCString();
ccStr->m_sString = currString; if (root_name!="")
{
allData.push_back(currString);
CCLOG("enter textHandler");
}
}
实现完毕后 , 在你需要的地方 添加如下代码 , 我的是在 HelloWorld.cpp 的 init()函数 中添加的 (别忘了包含头文件 #include "XmlParse.h")
CXmlParse* parseXml = CXmlParse::parseWithFile("test.xml");
for(int i=; i<parseXml->allData.size(); ++i)
{
CCLabelTTF* pLab = CCLabelTTF::create(parseXml->allData[i].c_str(),"Arial",);
pLab->setPosition(ccp(size.width/,size.height/*-i*));
this->addChild(pLab,);
}
哦,差点忘记了 还有个 test.xml 没有上桌呢 不废话了 直接上菜
<?xml version="1.0" encoding="utf-8"?>
<TestData>
<key1>XML</key1>
<key2>爱国</key2>
<key3>包容</key3>
<key4>厚德</key4>
<key5>载物</key5>
<key6>Try your best to do things better</key6>
</TestData>
简单吧 ,就这样了 ,下面看看结果吧 看看是不是如我们所愿

那就这样吧 …… 明天还得上班 赶紧看完《七剑》洗洗睡吧,要不明天就起不来了…… 不废话了 走起……
cocos2d-x 中 xml 文件读取的更多相关文章
- Springboot 项目中 xml文件读取yml 配置文件
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlProp ...
- xml文件读取到数据库
xml文件读取到数据库 第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步 xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...
- php xml 文件读取 XMLReader
php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...
- MyEclipse/Eclipse中XML文件的格式化配置
Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...
- Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理
Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...
- javascript读取xml文件读取节点数据的例子
分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...
- eclipse中xml文件格式化
eclipse中xml文件格式化(ctrl+shift+f),可能会发现格式化xml文件后很乱,如图: 这不是我想要的样子,我想要的是这样的: 解决办法:windows -> Perferenc ...
- 在eclipse中xml文件注释的快捷键
在eclipse中xml文件注释的快捷键 注释:Ctrl+Shift+/ 取消注释:Ctrl+Shift+\
- Xml 文件读取
.NET 读取Xml文件,用到XmlDocument类. 1.要获取文档的根: DocumentElement. 2.Attributes :获取 XmlAttributeCollection 包含此 ...
随机推荐
- 批处理--执行sql(mysql数据库)
@echo off rem test.sql文件 for %%i in (test.sql) do ( echo excute %%i mysql -u用户名 -p密码 -D数据库名 < %%i ...
- com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: fallback method wasn't found: serviceError([class java.lang.String]) 异常
在使用spring cloud 的 Hystrix 后可能会遇到 如下截图错误: 后台代码如下: 找了好一会经过分析参数方法和原方法参数步一致造成: 修改后代码如下:
- HYSBZ - 1799 self 同类分布
self 同类分布 HYSBZ - 1799 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数.Sample Input 10 19 Sample Output 3 Hint [约束条件] ...
- Python高级编程第二版--笔记
不只是CPython Stackless Python Jython(与java集成) IronPython(与net集成) PyPy python真正出众的领域在于围绕语言打造的整个生态系统. Py ...
- java web Listener的简单使用案例
1.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...
- ip地址设备信息
其实是个小问题,在项目中遇到要获取手机ip地址和mac地址的问题,mac地址获取用appcan的uexDevice插件可以实现. 但是ip地址,获取的方式很多,具体有搜狐/腾讯/新浪等提供的接口.但是 ...
- PHP数据库链接类(PDO+Access)实例分享
这篇文章主要介绍了PHP数据库链接类(PDO+Access),有需要的朋友可以参考一下 PHP PDO Access链接 复制代码代码如下: class DbHelpClass { ...
- linux查看当前文件夹下每个文件大小
查看当前文件夹下每个文件大小 并会给出当前文件大小总和,后面加具体的文件名会显示具体的文件大小 ls -lht 把*换成具体的文件名会显示具体的文件大小 du -sh *
- P4844 LJJ爱数数
题目 P4844 LJJ爱数数 本想找到莫比乌斯反演水题练练,结果直接用了两个多小时才做完 做法 \(\sum\limits_{a=1}^n\sum\limits_{b=1}^n\sum\limits ...
- Spark Structured Streaming框架(1)之基本用法
Spark Struntured Streaming是Spark 2.1.0版本后新增加的流计算引擎,本博将通过几篇博文详细介绍这个框架.这篇是介绍Spark Structured Streamin ...