实现类 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 文件读取的更多相关文章

  1. Springboot 项目中 xml文件读取yml 配置文件

    <bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlProp ...

  2. xml文件读取到数据库

    xml文件读取到数据库   第一步,导包 c3p0,dom4j,jaxen,MySQL-connector 第二步  xml文件,config文件 第三步 javabean 第四步 c3p0的工具类 ...

  3. php xml 文件读取 XMLReader

    php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...

  4. MyEclipse/Eclipse中XML文件的格式化配置

    Eclipse中XML文件的格式化配置 MyEclipse: 这一步的配置是使格式化的效果为控件的每个属性配置占一行.进入 Window/Preferences,展开到 XML/XML Resourc ...

  5. Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理

    Mybatis特殊字符处理,Mybatis中xml文件特殊字符的处理 >>>>>>>>>>>>>>>>& ...

  6. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  7. eclipse中xml文件格式化

    eclipse中xml文件格式化(ctrl+shift+f),可能会发现格式化xml文件后很乱,如图: 这不是我想要的样子,我想要的是这样的: 解决办法:windows -> Perferenc ...

  8. 在eclipse中xml文件注释的快捷键

    在eclipse中xml文件注释的快捷键 注释:Ctrl+Shift+/ 取消注释:Ctrl+Shift+\

  9. Xml 文件读取

    .NET 读取Xml文件,用到XmlDocument类. 1.要获取文档的根: DocumentElement. 2.Attributes :获取 XmlAttributeCollection 包含此 ...

随机推荐

  1. 设置tableView背景颜色

    [treeTableView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight] ...

  2. python 基础 9.5 数据库连接池

      一. 数据库连接池    python 编程中可以使用MySQLdb 进行数据库的连接及诸如查询,插入,更新等操作,但是每次连接mysql 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

  3. Python 基本数据类型和序列类型

    python 3.6.4 中,有9种数据类型: int, float, bool, complex, list, tuple, string, set, dict (1).int 整型,不可变 (2) ...

  4. 【BZOJ3488】[ONTAK2010]Highways 扫描线+树状数组

    [BZOJ3488][ONTAK2010]Highways Description 给一棵n个点的树以及m条额外的双向边q次询问,统计满足以下条件的u到v的路径:恰经过一条额外的边不经过树上u到v的路 ...

  5. 【BZOJ3991】[SDOI2015]寻宝游戏 树链的并+set

    [BZOJ3991][SDOI2015]寻宝游戏 Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩 ...

  6. rate limiter - system design

    1 问题 Whenever you expose a web service / api endpoint, you need to implement a rate limiter to preve ...

  7. Linux软件包分类

    源代码包 优点: 1.给你的就是源代码 2.可以修改源代码 3.可以自由选择所需的功能 4.软件是在自己电脑上编译安装,所以更加稳定高效 5.卸载方便(直接删了你安装软件的那个目录就好了) 缺点: 1 ...

  8. Data Structure Array: Program for array rotation

    http://www.geeksforgeeks.org/array-rotation/ O(n), O(1) #include <iostream> #include <vecto ...

  9. 模块化(CommonJs、AMD、CMD、UMD)发展历史与优缺点

    全文主要整理自摘自<Webpack中文指南>(好文,建议直接去看,以下仅对该系列文章中的<历史发展>篇幅进行备份——也整理了点其他内容) 模块化 模块化是老生常谈了,这里不做阐 ...

  10. Java多线程系列 JUC锁08 LockSupport

    转载 http://www.cnblogs.com/skywang12345/p/3505784.html https://www.cnblogs.com/leesf456/p/5347293.htm ...