温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

跨平台解析xml的方法(tinyXML)

发布时间:2020-06-17 09:58:12 来源:网络 阅读:1025 作者:zswnet 栏目:开发技术

 在开发cocos2dx跨平台网络游戏的时候,数据基本都会处理成xml格式。

cocos2dx封装了libxml,处理xml可以使用封装好的类CCSAXParser,  

采用key - value ,key- value方式编辑的xml可以采用CCSAXParser。

我们编辑的xml大量使用到了key-value -Attribute ,就是数据基本都写在了属性里面,所以我采用了第三方库tinyxml

下面是代码实现:

  1. void HXmlParse::Read_questxml(const char * docname ,  char* buf_ ,GameBoard * gameBoardinstance){ 
  2.      
  3.     TiXmlDocument doc(docname); 
  4.     //bool loadOkay = doc.LoadFile(); 
  5.         if( strcmp( docname,"")!=0){ 
  6. //这个是从网络下载的文件,缓存到本地,所以有判断
  7.     char* pBytes = GOEUtilies::getFileDataFromWriteablePath(docname); 
  8. //  CCLog("getFileData:%s |pBytes:%d",docname,size); 
  9.     doc.Parse((const char *)pBytes,0,TIXML_ENCODING_UTF8); 
  10.         }else 
  11.         { 
  12.             doc.Parse((const char*)buf_,0,TIXML_ENCODING_UTF8); 
  13.         } 
  14.  
  15.  
  16. //  if ( !loadOkay ) 
  17. //  { 
  18. //      CCLOG( "Could not load test file '%s'. Error='%s'. Exiting.\n", docname,doc.ErrorDesc() ); 
  19. //      return; 
  20. //  } 
  21.      
  22.     TiXmlNode* noderoot = 0;           //the root node 
  23.     //TiXmlNode* nodearray = 0; 
  24.     TiXmlElement* todoElement = 0;   // the first node , like Accout,Crop ... 
  25.     TiXmlElement* itemElement = 0;   //  the Accout,Crop 's element list 
  26.      
  27.     noderoot = doc.RootElement()->FirstChild(); 
  28.      
  29.     gameBoardinstance->_goeStaticData->quests_ = new CCDictionary(); 
  30.      
  31.     for( todoElement = noderoot->FirstChildElement(); 
  32.         todoElement; 
  33.         todoElement = todoElement->NextSiblingElement()) 
  34.     { 
  35.         GOEStaticQuest * quest = new GOEStaticQuest(); 
  36.         quest->questId_ = atoi(todoElement->Attribute("id")); 
  37.         gameBoardinstance->_goeStaticData->questId_ = quest->questId_; 
  38.         quest->needIds_ = *(CCString::create(todoElement->Attribute("needid"))); 
  39.         quest->nextIds_ = *(CCString::create(todoElement->Attribute("nextid"))); 
  40.         quest->newId_ = atoi(todoElement->Attribute("newid")); 
  41.         quest->exp_ = atoi(todoElement->Attribute("exp")); 
  42.         quest->resource_ = atoi(todoElement->Attribute("recource")); 
  43.         quest->coin_ = atoi(todoElement->Attribute("coin")); 
  44.  
  45.         quest->card_ = *(CCString::create(todoElement->Attribute("card"))); 
  46.         quest->icon_ = *(CCString::create(todoElement->Attribute("icon"))); 
  47.         quest->power_ = atoi(todoElement->Attribute("power")); 
  48.  
  49.         gameBoardinstance->_goeStaticData->quests_->setObject((CCObject*)quest, quest->questId_); 
  50.          
  51.         for( itemElement = todoElement->FirstChildElement(); 
  52.             itemElement; 
  53.             itemElement = itemElement->NextSiblingElement() ) 
  54.         { 
  55.             GOEStaticTask * task = new GOEStaticTask(); 
  56.             task->taskId_ = atoi(itemElement->Attribute("id")); 
  57.             task->action_ = *(CCString::create(itemElement->Attribute("action"))); 
  58.             task->type_ = *(CCString::create(itemElement->Attribute("type"))); 
  59.             task->value_ = *(CCString::create(itemElement->Attribute("value"))); 
  60.             task->params_ = *(CCString::create(itemElement->Attribute("params"))); 
  61.              
  62.             GOEStaticQuest * q = (GOEStaticQuest*)gameBoardinstance->_goeStaticData->quests_->objectForKey(gameBoardinstance->_goeStaticData->questId_); 
  63.             q->tasks_.addObject((CCObject*)task); 
  64.         } 
  65.  
  66.     } 

 

可以对比xml,很容易理解代码,主要就是节点,然后遍历

  1. <?xml version='1.0' encoding='UTF-8' standalone='no'?> 
  2. <goe:database xmlns:goe='http://www.elex-tech.com/sns/platform/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> 
  3. <quests> 
  4. <quest id="301" icon="quest2" newid="0" needid="202" nextid="401" exp="0" recource="0" coin="0" card="0" power="0"> 
  5. <task id="0" action="buildingHarvest" type="301" value="0" params="0"/> 
  6. </quest> 
  7. <quest id="302" icon="quest2" newid="0" needid="204" nextid="402" exp="0" recource="0" coin="0" card="0" power="0"> 
  8. <task id="0" action="buildingHarvest" type="401" value="0" params="0"/> 
  9. </quest> 
  10. </quests> 
  11. </goe:database> 


 

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI