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

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14px; line-height:26px"> 尊重原创,转载请注明来自:star特530的CSDN博客 <a target="_blank" href="http://blog.csdn.net/start530/article/details/19632869"

尊重原创,转载请注明来自:star特530的CSDN博客 http://blog.csdn.net/start530/article/details/19632869

这阶段很忙,灰常忙,人又感冒了。前两天去报了驾校,所以下班回家后都在突击科目一,争取下周就去考。话说我们这边驾校报名费要六千,全国还有其他地方有这么高的吗?

--------------------------------
前天有人问我beta2 要如何读取xml文档,我刚要说用array的相关接口去读取,才想起beta之后早没有array这玩意了。
那么既然之前是用arry读取,那么现在应该是可以用 容器 来读取吧?

最后我找到了这么两个函数接口:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ValueVector p_vec = FileUtils::getInstance()->getValueVectorFromFile("label.plist");  
  2. ValueMap p_map = FileUtils::getInstance()->getValueMapFromFile("label.xml");  


那么,具体该怎么用呢。我之前有写过一篇博客,就是从xml文档读取中文的,
接下来就将那篇博客的代码移植到3.0 beta上。我用ValueVector的方法。

传送门:http://blog.csdn.net/start530/article/details/18740733


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

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  3. <plist version="1.0">  
  4. <array>  
  5.     <dict>  
  6.         <key>id</key>  
  7.         <string>10</string>  
  8.         <key>info</key>  
  9.         <string>风一般的男纸</string>  
  10.     </dict>  
  11.     <dict>  
  12.         <key>id</key>  
  13.         <string>20</string>  
  14.         <key>info</key>  
  15.         <string>注定是寂寞的</string>  
  16.     </dict>  
  17. </array>  
  18. </plist>  

步骤如下:
1、读取xml文档,将读取到的内容放到ValueVector上。
2、通过id获取info里的内容;
3、将info里的内容显示到label中。
[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1.   
代码实现: 1、读取

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ValueVector txt_vec = FileUtils::getInstance()->getValueVectorFromFile("label.xml");  

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. typedef std::vector<Value> ValueVector;  

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

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. auto txt_map = txt_vec.at(0).asValueMap();  

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int id_int = txt_map.at("id").asInt();  

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

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if(id_int == 10)  
  2. {  
  3.     auto label_str = txt_map.at("info").asString();  
  4. }  

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

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

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

Vectorhttp://blog.csdn.net/start530/article/details/19170853

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

恩,就酱紫。

相关文章
|
XML 数据格式
hutool将XML文档转换为String
hutool将XML文档转换为String
|
17天前
|
XML JavaScript 前端开发
XML文档节点导航与选择指南
XPath是XSLT的核心部分,用于XML文档的节点定位和选择。它采用路径表达式语法,包含200多个内置函数处理各种数据类型。XPath在编程语言如JavaScript中广泛使用,与XSLT配合进行XML转换和样式处理。它涉及7种节点类型,如元素、属性和文本,以及多种节点间关系,如父、子、同级等。XPath还使用轴(如ancestor、child)来描述节点间的关联,并支持运算符进行逻辑和数学操作。
27 0
XML文档节点导航与选择指南
|
6月前
|
XML JavaScript 前端开发
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示试读版
65 0
|
6月前
|
XML JavaScript 数据格式
使用Dom4J解析XML文档
XML解析的方式 XML常见的两种解析方式: DOM: 要求解析器将整个XML文件全部加载到内存中,生成一个Document对象 优点:元素和元素之间保留结构、关系,可以针对元素进行增删查改操作 缺点:如果XML文件过大,可能会导致内存溢出 SAX:是一种速度更快,更加高效的解析方式。它是逐行扫描,边扫描边解析,并且以事件驱动的方式来进行具体的解析,每解析一行都会触发一个事件 优点: 不会出现内存溢出的问题,可以处理大文件 缺点:只能读,不能写 概念辨析: 解析器就是根据不同的解析方式提供具体的实现。 为了方便开发人员来解析XML,有一些方便操作的类库。例如Dom4j其中就包含了很多解
59 0
|
XML 自然语言处理 JavaScript
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示
SAP UI5 本地开发如何实现 XML 和 JavaScript 代码的自动完成和嵌入式 API 文档自动显示
|
XML 存储 消息中间件
Tsung MQTT协议简介及MQTT xml文档配置介绍
Tsung MQTT协议简介及MQTT xml文档配置介绍
128 0
|
XML JavaScript Java
Java采用4种方法处理XML文档
Java采用4种方法处理XML文档
|
XML 数据格式
hutool读取xml文件
hutool读取xml文件
|
XML 存储 Java
java积累——dom4j读取xml文件
java积累——dom4j读取xml文件
245 0
|
XML 缓存 Java
【XML】Java创建XML文档
【XML】Java创建XML文档
146 0
【XML】Java创建XML文档