Cocos2d-x xml解析
2015-09-03 20:21
411 查看
Cocos2d-x xml解析
Cocos2d-x 已经加入了tinyxml2用于xml的解析。3.0版本位于
external/tinyxml2下。2.x版本位于
cocos2dx/support/tinyxml2下。
tinyxml2 Github地址:https://github.com/leethomason/tinyxml2
帮助文档地址:http://grinninglizard.com/tinyxml2docs/index.html
生成xml文档
引入头文件#include "tinyxml2/tinyxml2.h" using namespace tinyxml2;
xml文档生成
void HelloWorld::makeXML(const char *fileName) { std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName; XMLDocument *pDoc = new XMLDocument(); //xml 声明(参数可选) XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\""); pDoc->LinkEndChild(pDel); //添加plist节点 XMLElement *plistElement = pDoc->NewElement("plist"); plistElement->SetAttribute("version", "1.0"); pDoc->LinkEndChild(plistElement); XMLComment *commentElement = pDoc->NewComment("this is xml comment"); plistElement->LinkEndChild(commentElement); //添加dic节点 XMLElement *dicElement = pDoc->NewElement("dic"); plistElement->LinkEndChild(dicElement); //添加key节点 XMLElement *keyElement = pDoc->NewElement("key"); keyElement->LinkEndChild(pDoc->NewText("Text")); dicElement->LinkEndChild(keyElement); XMLElement *arrayElement = pDoc->NewElement("array"); dicElement->LinkEndChild(arrayElement); for (int i = 0; i<3; i++) { XMLElement *elm = pDoc->NewElement("name"); elm->LinkEndChild(pDoc->NewText("Cocos2d-x")); arrayElement->LinkEndChild(elm); } pDoc->SaveFile(filePath.c_str()); pDoc->Print(); delete pDoc; }
打印结果
<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <!--this is xml comment--> <dic> <key>Text</key> <array> <name>Cocos2d-x</name> <name>Cocos2d-x</name> <name>Cocos2d-x</name> </array> </dic> </plist>
上面代码使用tinyxml简单生成了一个xml文档。
解析xml
下面我们就来解析上面创建的xml文档引入头文件
#include "tinyxml2/tinyxml2.h" using namespace tinyxml2;
xml解析
void HelloWorld::parseXML(const char *fileName) { std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName; XMLDocument *pDoc = new XMLDocument(); XMLError errorId = pDoc->LoadFile(filePath.c_str()); if (errorId != 0) { //xml格式错误 return; } XMLElement *rootEle = pDoc->RootElement(); //获取第一个节点属性 const XMLAttribute *attribute = rootEle->FirstAttribute(); //打印节点属性名和值 log("attribute_name = %s,attribute_value = %s", attribute->Name(), attribute->Value()); XMLElement *dicEle = rootEle->FirstChildElement("dic"); XMLElement *keyEle = dicEle->FirstChildElement("key"); if (keyEle) { log("keyEle Text= %s", keyEle->GetText()); } XMLElement *arrayEle = keyEle->NextSiblingElement(); XMLElement *childEle = arrayEle->FirstChildElement(); while ( childEle ) { log("childEle Text= %s", childEle->GetText()); childEle = childEle->NextSiblingElement(); } delete pDoc; }
在节点解析过程中,注意对获取到的节点进行判空处理。
解析结果打印
cocos2d: attribute_name = version,attribute_value = 1.0 cocos2d: keyEle Text= Text cocos2d: childEle Text= Cocos2d-x cocos2d: childEle Text= Cocos2d-x cocos2d: childEle Text= Cocos2d-x
小结
上面的简单示例,演示了如何使用tinyxml进行xml文档生成和解析。更多详细的帮助请参考 tinyxml帮助文档http://grinninglizard.com/tinyxml2docs/index.html相关文章推荐
- android 工程横竖屏设置无效 cocos2dx v3.7.1
- Cocos2dx核心概念
- Cocos2dx之入门基础
- cocos2d-x 3.0学习-创建菜单场景
- cocos2d-x 3.0学习-使用Physicals创建物理世界
- cocos2d-x 3.0学习-Android中集成Admob插页广告
- Cocos2d继承结构图
- Cocos2d-x从入门到精通第十课《Cocos2d-x中的Sprite》
- 使用cocos2dx做强制新手引导的触摸区域误差的个人解决方案
- cocos2d-js解析官方js-test实例入口
- Cocos2d-x从入门到精通第九课《Director,Scene,Layer,Sprite的关系》
- js cocostudio中动画帧事件的使用
- cocostudio的BitmapLabel字体替换
- curl 返回CURLE_COULDNT_RESOLVE_HOST、CURLE_COULDNT_CONNECT
- Cocos2dx学习总结一
- cocos2d接安卓facebook插件(已测cocos-x 3.7 3.8版本)
- cocos2d-x 3.0 场景切换特效汇总
- cocos2dx常见49种Action
- Cocos2d-x----------------------------------ProgressTimer进度条
- 【Cocos2dx】中文乱码问题