Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

Cocos2d-x 3.0 加入了rapidjson库用于json解析。位于external/json下。

rapidjson 项目地址:http://code.google.com/p/rapidjson/wiki:http://code.google.com/p/rapidjson/wiki/UserGuide

下面就通过实例代码讲解rapidjson的用法。

使用rapidjson解析json串

  1. 引入头文件


    1

    2

    #include "json/rapidjson.h"

    #include "json/document.h"

  2. json解析

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    std::string str = "{\"hello\" : \"word\"}";

    CCLOG("%s\n", str.c_str());

    rapidjson::Document d;

    d.Parse<0>(str.c_str());

    if (d.HasParseError())  //打印解析错误

    {

        CCLOG("GetParseError %s\n",d.GetParseError());

    }

    if (d.IsObject() && d.HasMember("hello")) {

        CCLOG("%s\n", d["hello"].GetString());//打印获取hello的值

    }

  3. 打印结果

    1

    2

    3

    cocos2d: {"hello" : "word"}

    cocos2d: word

注意:只支持标准的json格式,一些非标准的json格式不支持。

一些常用的解析方法需要自己封装。注意判断解析节点是否存在。

使用rapidjson生成json串

  1. 引入头文件


    1

    2

    3

    4

    #include "json/document.h"

    #include "json/writer.h"

    #include "json/stringbuffer.h"

    using namespace  rapidjson;

  2. 生成json串

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    rapidjson::Document document;

    document.SetObject();

    rapidjson::Document::AllocatorType& allocator = document.GetAllocator();

    rapidjson::Value array(rapidjson::kArrayType);

    rapidjson::Value object(rapidjson::kObjectType);

    object.AddMember("int", 1, allocator);

    object.AddMember("double", 1.0, allocator);

    object.AddMember("bool", true, allocator);

    object.AddMember("hello", "你好", allocator);

    array.PushBack(object, allocator);

    document.AddMember("json", "json string", allocator);

    document.AddMember("array", array, allocator);

    StringBuffer buffer;

    rapidjson::Writer<StringBuffer> writer(buffer);

    document.Accept(writer);

    CCLOG("%s",buffer.GetString());

  3. 打印结果

    1

    cocos2d: {"json":"json string","array":[{"int":1,"double":1,"bool":true

    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文档

    1. 引入头文件


      1

      2

      #include "tinyxml2/tinyxml2.h"

      using namespace tinyxml2;

    2. xml文档生成

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      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;

      }

    3. 打印结果

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      <?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文档

    1. 引入头文件


      1

      2

      #include "tinyxml2/tinyxml2.h"

      using namespace tinyxml2;

    2. xml解析

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      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;

      }

      在节点解析过程中,注意对获取到的节点进行判空处理。

    3. 解析结果打印

      1

      2

      3

      4

      5

      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

时间: 2024-12-24 08:14:46

Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析的相关文章

(27)Cocos2d-x 3.0 Json用法

Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidjson/wiki:http://code.google.com/p/rapidjson/wiki/UserGuide 下面就通过实例代码讲解rapidjson的用法. 使用rapidjson解析json串 引入头文件 #include "json/rapidjson.h" #include

Cocos2d-x Json用法

Cocos2d-x 3.0 Json用法 Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidjson/ wiki:http://code.google.com/p/rapidjson/wiki/UserGuide 下面就通过实例代码讲解rapidjson的用法. 使用rapidjson解析json串 引入头文件 #include "json/rapi

高屋建瓴 cocos2d-x-3.0架构设计 Cocos2d (v.3.0) rendering pipeline roadmap(原文)

Cocos2d (v.3.0) rendering pipeline roadmap Why (the vision) The way currently Cocos2d does rendering is good but it is beginning to feel somehow antiquate and moreover it doesn't actually leverage modern multi core CPUs so popular nowadays on most mo

Android数据格式解析对象JSON用法

1.JSON概念: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON可以将Java对象转成json格式的字符串,可以将json字符串转换成Java.比XML更轻量级,Json使用起来比较轻便和简单.JSON数据格式,在Android中被广泛运用于客户端和服务器通信,在网络数据传输与解析时非常方便. 2.环境配置 http://code.google.com/p/googl

新浪微博OAuth2.0的用法

最近学习Android开发,照着视频开发新浪微博,但是视频里的介绍的是OAuth1.0的授权方式,试了半天发现用不了. 原来现在一般没审核的用户只能使用OAuth2.0了,视频教学里的方法已经过时了.于是只好自己研究如何进行微博认证. OAuth2.0的授权过程 说白了,就是请求获取Grant Code→使用Grant Code申请Access Token→以后就使用这个Access Token获取微博的服务,这比OAuth1.0的授权方式简化了不少. 如果不使用别的第三方OAuth认证的库或者

J-Query开发锦集(0):JSON.parse()和JSON.stringify()区别

项目中我们经常会使用JSON字符串转换,而且很频繁.所以总结如下,很简单的代码. 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>JSON.parse()和JSON.stringify()区别</title> 6 <script type="text/javascrip

json用法常见错误

Json用法三个常见错误 net.sf.json.JSONException: java.lang.NoSuchMethodException

问题:c# newtonsoft.json使用;结果:Newtonsoft.Json 用法

Newtonsoft.Json 用法 Newtonsoft.Json 是.NET 下开源的json格式序列号和反序列化的类库.官方网站: http://json.codeplex.com/ 使用方法 1.首先下载你需要的版本,然后在应用程序中引用Newtonsoft.Json.dll 文件. 2.引用命名空间using Newtonsoft.Json;  using Newtonsoft.Json.Linq; 使用示例: string jsonText = "[{'a':'aaa','b':'b

北京PK10平台架设 href=&quot;javascript:void(0)&quot;的用法

href="javascript:void(0)"的用法 href="javascript:void(0)"的理解 href="javascript:void(0);"的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址,而void(0)表示一个空的方法,也就是不执行js函数.北京PK10平台架设 Q-2189563389为什么要使用href="javascript:void(0);" javascript:是伪协议,