久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

【玩轉cocos2d-x之三十二】xml的解析

 Kitsdk 2014-02-24

原創(chuàng)作品,,轉載請標明http://blog.csdn.net/jackystudio/article/details/17409381


cocos2d-x中對xml的解析是采用的TinyXML庫,而對plist的解析同時結合了CCDictionary來處理,,這里簡單介紹下cocos2d-x中解析xml的兩種方式,也是常用的xml兩個C++解析庫:TinyXML和RapidXML,。xml被設計用于數據存儲和傳輸,,重點是數據內容本身,,而不像html,,用于表現(xiàn)數據。


1.TinyXML


1.1.概況

TinyXML的主頁是http://www./tinyxml/,,本來不打算介紹這個庫的,,因為它的解析效率并不高,但是鑒于cocos2d-x采用的就是它,,所以也稍微寫一下它的用法,,cocos2d-x使用的是TinyXML2,Github地址在https://github.com/leethomason/tinyxml2,。就是對TinyXML重新進行了封裝,,具體的區(qū)別在其github上也寫的很清楚了。


1.2.示例

這里不介紹API,,因為太多了,,在線手冊也都有。首先下載TinyXML庫,,將4個cpp文件和2個h文件加入cocos2d-x中,。添加頭文件時只需添加"tinyxml.h"即可。


1.2.1.xml的創(chuàng)建

  1. void TestLayer::writeTinyXML()  
  2. {  
  3.     TiXmlDocument* myTinyXMLDoc=new TiXmlDocument();//創(chuàng)建文檔對象  
  4.   
  5.     TiXmlElement* rootElement=new TiXmlElement("Jacky");//創(chuàng)建根節(jié)點并連接到文檔  
  6.     myTinyXMLDoc->LinkEndChild(rootElement);  
  7.   
  8.     TiXmlElement* infoElement=new TiXmlElement("Info");//創(chuàng)建info節(jié)點并連接到根節(jié)點  
  9.     rootElement->LinkEndChild(infoElement);  
  10.   
  11.     infoElement->SetAttribute("Name","Jacky");//為info節(jié)點設置屬性  
  12.     infoElement->SetAttribute("QQ","754505629");  
  13.     infoElement->SetAttribute("E-mail","[email protected]");  
  14.   
  15.     TiXmlElement* blogElement=new TiXmlElement("blog");  
  16.     infoElement->LinkEndChild(blogElement);//創(chuàng)建blog節(jié)點并連接到info節(jié)點  
  17.     TiXmlText* blogtext=new TiXmlText("http://blog.csdn.net/jackystudio");  
  18.     blogElement->LinkEndChild(blogtext);//為blog節(jié)點添加文本值  
  19.   
  20.     TiXmlElement* websiteElenment=new TiXmlElement("website");  
  21.     infoElement->LinkEndChild(websiteElenment);  
  22.     TiXmlText* websitetext=new TiXmlText("http://www.");  
  23.     websiteElenment->LinkEndChild(websitetext);  
  24.   
  25.     myTinyXMLDoc->SaveFile(CCFileUtils::sharedFileUtils()->fullPathForFilename("testTiny.xml").c_str());//保存xml  
  26.   
  27.     delete myTinyXMLDoc;  
  28. }  
是不是很奇怪為什么new了那么多內存,,但最后只delete TixmlDocument呢,?其實在TinyXML中,子節(jié)點的內存管理都由父節(jié)點進行維護,,所以不必在釋放內存時對每個子節(jié)點都進行釋放,,而只需要釋放父節(jié)點即可。

1.2.2.xml的讀取

  1. void TestLayer::readTinyXML()  
  2. {  
  3.     TiXmlDocument* myTinyXMLDoc=new TiXmlDocument(CCFileUtils::sharedFileUtils()->fullPathForFilename("testTiny.xml").c_str());  
  4.     myTinyXMLDoc->LoadFile();  
  5.   
  6.     TiXmlElement* rootElement = myTinyXMLDoc->RootElement();  //獲取根節(jié)點  
  7.     TiXmlElement* infoElement = rootElement->FirstChildElement();  // 獲取Info節(jié)點    
  8.   
  9.     while (infoElement)   
  10.     {  
  11.   
  12.         TiXmlAttribute* attributeOfinfo = infoElement->FirstAttribute();  //獲得info的屬性    
  13.         while ( attributeOfinfo )   
  14.         {    
  15.             CCLOG("%s : %s",attributeOfinfo->Name(),attributeOfinfo->Value());//獲取所有屬性  
  16.             attributeOfinfo = attributeOfinfo->Next();    
  17.         }  
  18.   
  19.         TiXmlElement* blogElement = infoElement->FirstChildElement();//獲得blog  
  20.         CCLOG("blog : %s",blogElement->GetText());    
  21.   
  22.         TiXmlElement* websiteElement = blogElement->NextSiblingElement();//獲取website    
  23.         CCLOG("website : %s",websiteElement->GetText());    
  24.   
  25.         infoElement = infoElement->NextSiblingElement();//查找下一節(jié)點    
  26.     }    
  27.     delete myTinyXMLDoc;    
  28. }  

2.RapidXML


2.1.概況

RapidXML的主頁是http://rapidxml./,。在其手冊中第四節(jié)comparison with others parsers可以看到在同等條件下它的解析效率是TinyXML的30到60倍,,所以如果需要解析大文件的話,RapidXML是不二之選,。


2.2.示例

首先下載RapidXML庫,,將四個hpp文件都加入cocos2d-x中,在包含頭文件時,,4個hpp都要進行包含,。


2.2.1.xml的創(chuàng)建

  1. void TestLayer::writeRapidXML()  
  2. {  
  3.     rapidxml::xml_document<> myRapidXMLDoc;  
  4.   
  5.     rapidxml::xml_node<>* root = myRapidXMLDoc.allocate_node(rapidxml::node_element,"Jacky",NULL);//創(chuàng)建根節(jié)點  
  6.     myRapidXMLDoc.append_node(root);//追加根節(jié)點  
  7.   
  8.     rapidxml::xml_node<>* info = myRapidXMLDoc.allocate_node(rapidxml::node_element,"Info",NULL);//創(chuàng)建info節(jié)點  
  9.     info->append_attribute(myRapidXMLDoc.allocate_attribute("Name","Jacky"));  
  10.     info->append_attribute(myRapidXMLDoc.allocate_attribute("QQ","754505629"));  
  11.     info->append_attribute(myRapidXMLDoc.allocate_attribute("E-mail","[email protected]"));  
  12.     root->append_node(info);//追加info節(jié)點到root  
  13.   
  14.     //創(chuàng)建blog和website節(jié)點并追加到root  
  15.     rapidxml::xml_node<>* blog = myRapidXMLDoc.allocate_node(rapidxml::node_element,"blog","http://blog.csdn.net/jackystudio");  
  16.     info->append_node(blog);  
  17.     rapidxml::xml_node<>* website = myRapidXMLDoc.allocate_node(rapidxml::node_element,"website","http://www.");  
  18.     info->append_node(website);  
  19.       
  20.     //保存xml文檔  
  21.     std::string text;  
  22.     rapidxml::print(std::back_inserter(text), myRapidXMLDoc, 0);  
  23.     CCLog(text.c_str());  
  24.     std::ofstream out(CCFileUtils::sharedFileUtils()->fullPathForFilename("testRapid.xml"));  
  25.     out << myRapidXMLDoc;  
  26. }  

2.2.2.xml的讀取

  1. void TestLayer::readRapidXML()  
  2. {  
  3.     rapidxml::file<> fdoc(CCFileUtils::sharedFileUtils()->fullPathForFilename("testRapid.xml").c_str());//讀取數據  
  4.     CCLog(fdoc.data());  
  5.     rapidxml::xml_document<> myRapidXMLDoc;  
  6.     myRapidXMLDoc.parse<0>(fdoc.data());//將數據寫入xml_document  
  7.   
  8.     rapidxml::xml_node<>* root = myRapidXMLDoc.first_node();//獲取根節(jié)點  
  9.   
  10.     rapidxml::xml_node<>* info = root->first_node();//獲取Info節(jié)點  
  11.   
  12.     rapidxml::xml_attribute<>* info_attr = info->first_attribute();//獲取info屬性  
  13.     CCLog("%s:%s",info_attr->name(),info_attr->value());  
  14.     CCLog("%s:%s",info_attr->next_attribute()->name(),info_attr->next_attribute()->value());  
  15.     CCLog("%s:%s",info_attr->next_attribute()->next_attribute()->name(),info_attr->next_attribute()->next_attribute()->value());  
  16.   
  17.     rapidxml::xml_node<>* blog=info->first_node();//獲取blog節(jié)點  
  18.     CCLog("%s:%s",blog->name(),blog->value());  
  19.   
  20.     rapidxml::xml_node<>* website=blog->next_sibling();//獲取website節(jié)點  
  21.     CCLog("%s:%s",website->name(),website->value());  
  22. }  

3.生成xml的文件

以上2種方式生成的xml文件內容如下:

[html] view plaincopy
  1. <Jacky>  
  2.     <Info Name="Jacky" QQ="754505629" E-mail="[email protected]">  
  3.         <blog>http://blog.csdn.net/jackystudio</blog>  
  4.         <website>http://www.</website>  
  5.     </Info>  
  6. </Jacky>  

4.源碼下載

下載地址:http://download.csdn.net/detail/jackyvincefu/6732361

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多