http://www.2cto.com/kf/201402/280576.html


          Cocos2dx 3.0 提高篇(十一) xml文档的读取与调用

假设有一个名为 label.xml 的文档,内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--?xml version= "1.0" encoding= "UTF-8" ?-->
 
<plist version= "1.0" >
 
     <dict>
         <key>id</key>
         <string> 10 </string>
         <key>info</key>
         <string>风一般的男纸</string>
     </dict>
     <dict>
         <key>id</key>
         <string> 20 </string>
         <key>info</key>
         <string>注定是寂寞的</string>
     </dict>
</array>
</plist>

步骤如下:
1、读取xml文档,将读取到的内容放到ValueVector上。
2、通过id获取info里的内容;
3、将info里的内容显示到label中。
?
1
 
代码实现: 1、读取

?
1
ValueVector txt_vec = FileUtils::getInstance()->getValueVectorFromFile( "label.xml" );

这里有两个要点,一个是ValueVector,这是啥东东?我只能回答在,在CCValue.h里,有这么一行代码 :

?
1
typedef std::vector<value> ValueVector;</value>

恩,人艰不拆;
第二个要点是用 getValueVectorFromFile(FileName)读取xml文档...

2、提取数据
首先提取 id ,因为id和它对应的值是一对键值,所以可以用Map来存储它们:

?
1
auto txt_map = txt_vec.at( 0 ).asValueMap();

放到Map中即可用Map的方法读取键为”id"的值是多少:

?
1
int id_int = txt_map.at( "id" ).asInt();

最后就是做出判断,如果id的值为10的话,那么提取相应的键为 info 的值:

?
1
2
3
4
if (id_int == 10 )
{
     auto label_str = txt_map.at( "info" ).asString();
}

恩,过程就是这样;
3、将整理好的代码贴出来

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ValueVector txt_vec = FileUtils::getInstance()->getValueVectorFromFile( "label.xml" ); //读取xml文档,放入ValueVector中
 
for ( auto& e : txt_vec)
{
     auto txt_map = e.asValueMap(); //将键值转化成Map格式,放入txt_map中
     int id_int = txt_map.at( "id" ).asInt(); //获取id
     if ( 10 == id_int)
     {
         auto label_str = txt_map.at( "info" ).asString(); //获取info的值
         auto label1 = LabelTTF::create(label_str, "Arial" , 25 );
         label1->setPosition(Point( 160 , 425 ));
         this ->addChild(label1, 2 );
     }
     else if ( 20 == id_int)
     {
         auto label_str = txt_map.at( "info" ).asString();
         auto label1 = LabelTTF::create(label_str, "Arial" , 25 );
         label1->setPosition(Point( 160 , 400 ));
         this ->addChild(label1, 2 );
     }
}

如果有对Vector 、 Map使用不大了解的人,可以参考我之前写的博客:

Vector:http://blog.csdn.net/start530/article/details/19170853

Map:http://blog.csdn.net/start530/article/details/19284301


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值