溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

跨平臺(tái)解析xml的方法(tinyXML)

發(fā)布時(shí)間:2020-06-17 09:58:12 來源:網(wǎng)絡(luò) 閱讀:1020 作者:zswnet 欄目:開發(fā)技術(shù)

 在開發(fā)cocos2dx跨平臺(tái)網(wǎng)絡(luò)游戲的時(shí)候,數(shù)據(jù)基本都會(huì)處理成xml格式。

cocos2dx封裝了libxml,處理xml可以使用封裝好的類CCSAXParser,  

采用key - value ,key- value方式編輯的xml可以采用CCSAXParser。

我們編輯的xml大量使用到了key-value -Attribute ,就是數(shù)據(jù)基本都寫在了屬性里面,所以我采用了第三方庫(kù)tinyxml

下面是代碼實(shí)現(xiàn):

  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. //這個(gè)是從網(wǎng)絡(luò)下載的文件,緩存到本地,所以有判斷
  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.     } 

 

可以對(duì)比xml,很容易理解代碼,主要就是節(jié)點(diǎn),然后遍歷

  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問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI