无需繁琐的解析XML,cocos2d-x 3.x中最简单方便粗暴有效的数据方法-plist

转载请注明来自:blog.csdn.net/wjlpld

好吧,看网上各种解析XML,CSV等等一大坨东西,解析解析。。解析的头都大了啊。。。。其实在cocos2dx中存储数据最简单直接粗暴有效的办法就是plist,虽然网上各种关于速度的争论,不过对于一个程序来说,最简单的才是最好用的,更多的精力放到代码优化上

plist是特殊格式的XML,使用起来非常的简单高效,cocos2dx原生支持的解析格式,比如我们下面这个plist就是最简单的plist文件,plist文件可以直接用xcode进行创建

xcode内创建的样式:


实际的后台生成代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Skill001</key>
	<dict>
		<key>ID</key>
		<string>2001</string>
		<key>StartFrame</key>
		<integer>1</integer>
		<key>EndFrame</key>
		<integer>50</integer>
	</dict>
	<key>Skill002</key>
	<dict>
		<key>ID</key>
		<string>2002</string>
		<key>StartFrame</key>
		<integer>60</integer>
		<key>EndFrame</key>
		<integer>80</integer>
	</dict>
	<key>Skill003</key>
	<dict>
		<key>ID</key>
		<string>2003</string>
		<key>StartFrame</key>
		<integer>90000</integer>
		<key>EndFrame</key>
		<integer>100000</integer>
	</dict>
</dict>
</plist>

看上去是不是灰常的简单,其中要注意的是根节点必须是dictionary或者是arrary

在实际中使用的代码如下:

<pre name="code" class="cpp">    auto dic = FileUtils::getInstance()->getValueMapFromFile("AttackInfo.plist");
    ValueMap& dicSkill01 = dic["Skill001"].asValueMap();
    log("%s",dicSkill01["ID"].asstring().c_str());
    log("%d",dicSkill01["StartFrame"].asInt());


 

次奥,就。。。。。。这么几行代码?????

是的就这么几行代码就行了。。什么解析XML啊,解析json。玩命搞了半天。解析你XXXXX(此处被和谐)╮(╯_╰)╭╮(╯_╰)╭

好的,再给大家上一个全套的代码

PLIST文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
       <key>dict</key>
       <dict>
       <key>name</key>
       <string>Alice</string>
       <key>age</key>
       <string>20</string>
       </dict>
<key>array</key>
      <array>
      <integer>0</integer>
      <integer>1</integer>
      <integer>2</integer>
      </array>
<key>bool</key>
<true/>
<key>data</key>
<data></data>
<key>date</key>
<date>2015-02-16T16:47:11Z</date>
<key>number</key>
<integer>123456</integer>
<key>string</key>
<string>Hello World!</string>
</dict>
</plist>
//

实际使用代码
//
// 文件路径
std::string path = "/soft/cocos2d-x-3.4/projects/Demo34/Resources/testPlist.plist";
// 读取plist文件
// 以根节点为字典Dictionary为例
// 根节点为字典Dictionary,读取为一个ValueMap
ValueMap plist = FileUtils::getInstance()->getValueMapFromFile(path);
// 若根节点为数组Array,读取为一个ValueVector
// ValueVector plist = FileUtils::getInstance()->getValueVectorFromFile(path);
// 获取数据
// 读取 "string"
cclOG("string = %s",(plist["string"].asstring()).c_str());
// 读取 "dict",也是一个字典ValueMap
ValueMap& dict = plist["dict"].asValueMap();
cclOG("name = %s",(dict["name"].asstring()).c_str());
cclOG("age  = %s",(dict["age"].asstring()).c_str());
// 读取 "array",是一个数组ValueVector
ValueVector& array = plist["array"].asValueVector();
for (int i = 0; i < array.size(); i++) {
Value& value = array[i];
cclOG("%d",value.asInt());
}
//

特别提示

(1)根节点为Dictionary :使用 FileUtils::getInstance()->getValueMapFromFile(); 读取为一个ValueMap 。

(2)根节点为Array :使用 FileUtils::getInstance()->getValueVectorFromFile(); 读取为一个ValueVector 。

另外,别搞需要坑爹解析的XML了吧,哈哈

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇