@H_403_1@原创作品,转载请标明:http://www.jb51.cc/article/p-dpestbvf-ep.html
@H_403_1@
@H_403_1@cocos2d-x中对xml的解析是采用的TinyXML库,而对plist的解析同时结合了CCDictionary来处理,这里简单介绍下cocos2d-x中解析xml的两种方式,也是常用的xml两个C++解析库:TinyXML和RapidXML。xml被设计用于数据存储和传输,重点是数据内容本身,而不像html,用于表现数据。
@H_403_1@
@H_403_1@1.TinyXML
@H_403_1@
@H_403_1@1.1.概况
@H_403_1@TinyXML的主页是http://www.grinninglizard.com/tinyxml/@H_403_1@,本来不打算介绍这个库的,因为它的解析效率并不高,但是鉴于cocos2d-x采用的就是它,所以也稍微写一下它的用法,cocos2d-x使用的是TinyXML2,Github地址在https://github.com/leethomason/tinyxml2。就是对TinyXML重新进行了封装,具体的区别在其github上也写的很清楚了。
@H_403_1@
@H_403_1@1.2.示例
@H_403_1@这里不介绍API,因为太多了,在线手册也都有。首先下载TinyXML库,将4个cpp文件和2个h文件加入cocos2d-x中。添加头文件时只需添加"tinyxml.h"即可。
@H_403_1@
@H_403_1@1.2.1.xml的创建
@H_403_1@
- voidTestLayer::writeTinyXML()
- {
- TiXmlDocument*myTinyXMLDoc=newTiXmlDocument();//创建文档对象
- TiXmlElement*rootElement=newTiXmlElement("Jacky");//创建根节点并连接到文档
- myTinyXMLDoc->LinkEndChild(rootElement);
- TiXmlElement*infoElement=newTiXmlElement("Info");//创建info节点并连接到根节点
- rootElement->LinkEndChild(infoElement);
- infoElement->SetAttribute("Name","Jacky");//为info节点设置属性
- infoElement->SetAttribute("QQ","754505629");
- infoElement->SetAttribute("E-mail","Geek.Jacky@Gmail.com");
- TiXmlElement*blogElement=newTiXmlElement("blog");
- infoElement->LinkEndChild(blogElement);//创建blog节点并连接到info节点
- TiXmlText*blogtext=newTiXmlText("http://blog.csdn.net/jackystudio");
- blogElement->LinkEndChild(blogtext);//为blog节点添加文本值
- TiXmlElement*websiteElenment=newTiXmlElement("website");
- infoElement->LinkEndChild(websiteElenment);
- TiXmlText*websitetext=newTiXmlText("http://www.fusijie.com");
- websiteElenment->LinkEndChild(websitetext);
- myTinyXMLDoc->SaveFile(CCFileUtils::sharedFileUtils()->fullPathForFilename("testTiny.xml").c_str());//保存xml
- deletemyTinyXMLDoc;
- }
@H_403_1@1.2.2.xml的读取