一不小心就玩了一周的游戏了。哎。玩的时候时间过得总是这么快。。。

于是今天决定看一下之前不怎么非常熟悉的XML;(之前做游戏时数据的储存用到过XML,但这块是还有一个同事在做,所以不怎么熟悉),

看了看他写的xml和解析方法。然后自己改进了下。所以来简单的总结和分享分享

主要涉及到的有:

1. xml 创建

2.xml的解析

3.将解析后的xml数据用vector保存起来。

例如以下:(写完xml后,最简单的检查语法错误就是用IE浏览器打开看看,能够打开则说明语法没错)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Mineral>
  3. <mineral>
  4. <type>1</type>
  5. <times>100</times>
  6. <p>20</p>
  7. </mineral>
  8.  
  9. <mineral>
  10. <type>4</type>
  11. <times>100</times>
  12. <p>20</p>
  13. </mineral>
  14.  
  15. <mineral>
  16. <type>5</type>
  17. <times>100</times>
  18. <p>20</p>
  19. </mineral>
  20.  
  21. </Mineral>

在这里我依照网上的XML书写格式新建了一个名为 "Mineral.xml"的xml;

(Mineral就是矿的意思,xml 中我任意写了3中类型的矿石,每种矿石有自己的类型、倍率、概率)

然后将其保存在资源目录里面,然后新建一个cocos2d-x项目。

以下贴出主要解析代码

//.h文件

  1. #ifndef __HELLOWORLD_SCENE_H__
  2. #define __HELLOWORLD_SCENE_H__
  3.  
  4. #include "cocos2d.h"
  5. #include <string>
  6. #include <vector>
  7.  
  8. typedef struct Mineral
  9. {
  10. int times ;
  11. int type;
  12. int p;
  13.  
  14. }*PtrMineral;
  15.  
  16. class HelloWorld : public cocos2d::CCLayer
  17. {
  18. public:
  19. virtual bool init();
  20. static cocos2d::CCScene* scene();
  21. void menuCloseCallback(CCObject* pSender);
  22. bool readMinearlXml();
  23. void displayVec();
  24. CREATE_FUNC(HelloWorld);
  25. private:
  26. std::vector<PtrMineral >m_pMineralVec ;
  27. };
  28.  
  29. #endif

//.cpp文件

  1. #include "HelloWorldScene.h"
  2. #include "../support/tinyxml2/tinyxml2.h"
  3.  
  4. using namespace tinyxml2;
  5. USING_NS_CC;
  6.  
  7. CCScene* HelloWorld::scene()
  8. {
  9.  
  10. CCScene *scene = CCScene::create();
  11. HelloWorld *layer = HelloWorld::create();
  12. scene->addChild(layer);
  13. return scene;
  14. }
  15.  
  16. bool HelloWorld::init()
  17. {
  18. if ( !CCLayer::init() )
  19. {
  20. return false;
  21. }
  22. readMinearlXml();
  23. displayVec();
  24. return true;
  25. }
  26.  
  27. bool HelloWorld::readMinearlXml()
  28. {
  29. tinyxml2::XMLDocument* xmlData = new tinyxml2::XMLDocument();
  30. unsigned long nSize ;
  31. const char *pXmlBuffer = (const char*)CCFileUtils::sharedFileUtils()->getFileData("XML/Mineral.xml","rb",&nSize);
  32.  
  33. if( NULL == pXmlBuffer )
  34. {
  35. CCLOG("read Mineral.xml Failed");
  36. }
  37. else
  38. CCLOG("star read Mineral.xml");
  39.  
  40. xmlData->Parse(pXmlBuffer,nSize);
  41. XMLElement *rootNode = xmlData->RootElement();
  42. if(!rootNode)
  43. {
  44. return false;
  45. }
  46. XMLElement* curNode = rootNode->FirstChildElement("mineral");
  47.  
  48. while(NULL!= curNode)
  49. {
  50. PtrMineral pMineral =new Mineral();
  51. pMineral->type = (atoi)( (curNode->FirstChildElement("type"))->GetText() );
  52. pMineral->times = (atoi)( (curNode->FirstChildElement("times"))->GetText() );
  53. pMineral->p = (atoi)( (curNode->FirstChildElement("p"))->GetText() );
  54. m_pMineralVec.push_back(pMineral);
  55. curNode = curNode->NextSiblingElement("mineral");
  56. }
  57. delete xmlData;
  58. return true;
  59.  
  60. }
  61. void HelloWorld::displayVec()
  62. {
  63. CCLOG("*********m_pMineralVec*********");
  64. for(int i = 0 ; i<m_pMineralVec.size() ; i++)
  65. {
  66. CCLOG("<mineral>");
  67. CCLOG(" <type> = %i </type>",m_pMineralVec[i]->type);
  68. CCLOG(" <times> = %i </times>",m_pMineralVec[i]->times);
  69. CCLOG(" <p> = %i </p>",m_pMineralVec[i]->p);
  70. CCLOG("</mineral>");
  71.  
  72. }
  73.  
  74. }
  75.  
  76. void HelloWorld::menuCloseCallback(CCObject* pSender)
  77. {
  78. #if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
  79. CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
  80. #else
  81. CCDirector::sharedDirector()->end();
  82. #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
  83. exit(0);
  84. #endif
  85. #endif
  86. }

上面分别包括了xml的解析即xml的数据显示:

显演示样例如以下:

  1. star read Mineral.xml
  2. *********m_pMineralVec*********
  3. <mineral>
  4. <type> = 1 </type>
  5. <times> = 100 </times>
  6. <p> = 20 </p>
  7. </mineral>
  8. <mineral>
  9. <type> = 4 </type>
  10. <times> = 100 </times>
  11. <p> = 20 </p>
  12. </mineral>
  13. <mineral>
  14. <type> = 5 </type>
  15. <times> = 100 </times>
  16. <p> = 20 </p>
  17. </mineral>

对照可知,输出结果和之前创建的xml一致。就这样。xml的解析就ok 了,是不是非常easy啊

cocos2d-x 中XML解析与数据存储的更多相关文章

  1. Android中的5种数据存储方式

    本文转自  http://hi.baidu.com/maguowei/blog/item/7aca46c25574a33ae5dd3ba4.htmlAndroid数据存储Android提供了5种方式存 ...

  2. 2016 - 1- 23 iOS中xml解析 (!!!!!!!有坑要解决!!!!!!)

    一: iOS中xml解析的几种方式简介 1.官方原生 NSXMLParser :SAX方式解析,使用起来比较简单 2.第三方框架 libxml2 :纯C 同时支持DOM与SAX GDataXML: D ...

  3. Android编程中的5种数据存储方式

    Android编程中的5种数据存储方式 作者:牛奶.不加糖 字体:[增加 减小] 类型:转载 时间:2015-12-03我要评论 这篇文章主要介绍了Android编程中的5种数据存储方式,结合实例形式 ...

  4. C#操作数据表中XML格式的数据

    以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...

  5. IOS开发数据存储篇—IOS中的几种数据存储方式

    IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09  421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...

  6. Android中XML解析-Dom解析

    Android中需要解析服务器端传过来的数据,由于XML是与平台无关的特性,被广泛运用于数据通信中,有的时候需要解析xml数据,格式有三种方式,分别是DOM.SAX以及PULL三种方式,本文就简单以D ...

  7. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  8. xml解析----java中4中xml解析方法(转载)

    转载:https://www.cnblogs.com/longqingyang/p/5577937.html 描述 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与 ...

  9. Android中XML解析-SAX解析

    昨天由于时间比较匆忙只写了Android中的XML解析的Dom方式,这种方式比较方便,很容易理解,最大的不足就是内容多的时候,会消耗内存.SAX(Simple API for XML)是一个解析速度快 ...

随机推荐

  1. 【LeetCode-面试算法经典-Java实现】【120-Triangle(三角形)】

    [120-Triangle(三角形)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a triangle, find the minimum path s ...

  2. java基础——transient

    今天在看struts1源代码的时候,发如今ActionForm中首先声明了两个transient类型的protected变量. 之前没有接触过该transient类型,所以就查了查. transien ...

  3. MFC exe使用C++ dll中的std::string 崩溃

    VC6中 MFC exe中 new  纯C++ dll dll 崩溃 我把纯C++的 dll,用/MTd 换成/MDd.就能够了

  4. 广东工业大学2016校赛决赛-网络赛 1169 Problem A: Krito的讨伐 优先队列

    Problem A: Krito的讨伐 Description Krito终于干掉了99层的boss,来到了第100层.第100层可以表示成一颗树,这棵树有n个节点(编号从0到n-1),树上每一个节点 ...

  5. UESTC--1265--宝贵资源(简单数学)

    宝贵资源 Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: %lld & %llu Submit Status Des ...

  6. JPA实现一对多(OneToMany)关联

    转自:https://blog.csdn.net/qq_32444825/article/details/77084580 1.考试类 @Entity public classExam impleme ...

  7. ubuntu 使用阿里云 apt 源

    以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list 将http://archive. ...

  8. 从极大似然估计的角度理解深度学习中loss函数

    从极大似然估计的角度理解深度学习中loss函数 为了理解这一概念,首先回顾下最大似然估计的概念: 最大似然估计常用于利用已知的样本结果,反推最有可能导致这一结果产生的参数值,往往模型结果已经确定,用于 ...

  9. linux服务器卸载本机默认安装的jdk

    1.      查看系统安装的版本情况: rpm -qa | grep jdk rpm -qa | grep gcj 2.      查看并删除 [root@iZ2zeedm3x12d8xb4g15a ...

  10. SQLserver中用convert函数转换日期格式(1)

    SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用convert函数转换日期格式 SQL Server中文版的默认的日期字段datetime格式 ...