cocos2d-x 3.2读取xml和json练习
读取和生成xml文件:
#include "tinyxml2/tinyxml2.h"
using namespace tinyxml2; void HelloWorld::makeXml(const char* fileName)
{
//写入路径
std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;
XMLDocument *pDoc = new XMLDocument();
//头声明
XMLDeclaration *pDecl = pDoc->NewDeclaration("xml=version=\"1.0\" encoding=\"UTF-8\"");
pDoc->LinkEndChild(pDecl);
//注释
XMLComment *pCom = pDoc->NewComment("test xml");
pDoc->LinkEndChild(pCom); XMLElement *plistEl = pDoc->NewElement("plist");
plistEl->SetAttribute("version", "1.0");
plistEl->SetAttribute("age", 10);
pDoc->LinkEndChild(plistEl); XMLElement *dictEl = pDoc->NewElement("dict");
plistEl->LinkEndChild(dictEl); XMLElement *keyEl = pDoc->NewElement("key");
keyEl->LinkEndChild(pDoc->NewText("keyValue"));
dictEl->LinkEndChild(keyEl); XMLElement *arrayEl = pDoc->NewElement("array");
dictEl->LinkEndChild(arrayEl);
for (int i = 0; i<2 ; i++)
{
XMLElement *nameEl = pDoc->NewElement("name");
nameEl->LinkEndChild(pDoc->NewText("array value"));
arrayEl->LinkEndChild(nameEl);
} pDoc->SaveFile(filePath.c_str());
pDoc->Print();
delete pDoc;
} 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)
{
return;
} XMLElement *rootEl = pDoc->RootElement();
const XMLAttribute *attribute = rootEl->FirstAttribute();
while (attribute)
{
CCLOG("name=%s, value = %s", attribute->Name(), attribute->Value());
attribute = attribute->Next();
} XMLElement *dictEl = rootEl->FirstChildElement("dict");
XMLElement *keyEl = dictEl->FirstChildElement("key");
if (keyEl)
{
CCLOG("key el is = %s", keyEl->GetText());
} XMLElement *arrayEl = keyEl->NextSiblingElement();
XMLElement *childEl = arrayEl->FirstChildElement();
while (childEl)
{
CCLOG("child el is = %s", childEl->GetText());
childEl = childEl->NextSiblingElement();
} }
读取和生成json
#include "json/rapidjson.h"
#include "json/document.h"
#include "json/writer.h"
#include "json/stringbuffer.h"
例子:
void ReadAndWriteJsonScene::readJson()
{
std::string name = "testJson.json";
rapidjson::Document doc;
if (!FileUtils::getInstance()->isFileExist(name))
{
CCLOG("file is not exist");
return;
} std::string data = FileUtils::getInstance()->getStringFromFile(name);
doc.Parse<rapidjson::kParseDefaultFlags>(data.c_str());
if (doc.HasParseError() || !doc.IsArray())
{
return;
} for (auto i = 0; i<doc.Size(); i++)
{
rapidjson::Value &v = doc[i];
std::string name;
int age;
std::string sex;
if (v.HasMember("name"))
{
name = v["name"].GetString();
auto len = v["name"].GetStringLength();
CCLOG("name is %s, len is %d", name.c_str(), len);
} } } void ReadAndWriteJsonScene::writeJson()
{
rapidjson::Document doc;
doc.SetObject();
rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();
rapidjson::Value arr(rapidjson::kArrayType);
rapidjson::Value obj(rapidjson::kObjectType);
obj.AddMember("int", 1, allocator);
obj.AddMember("double", 2.0, allocator);
obj.AddMember("bool", true, allocator);
obj.AddMember("hello", "xxxxx", allocator);
arr.PushBack(obj, allocator); doc.AddMember("strX", "jsonTest", allocator);
doc.AddMember("arr", arr, allocator); rapidjson::StringBuffer buffer;
rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
doc.Accept(writer); CCLOG("buffer string = %s", buffer.GetString());
}
测试的json文件
[
{"name":"cl","age":27,"sex":"M"},
{"name":"cbsss","age":25,"sex":"W"},
{"name":"gx","age":25,"sex":"M"},
{"name":"hxl","age":27,"sex":"W"}
]
cocos2d-x 3.2读取xml和json练习的更多相关文章
- Ajax读取XML和JSON数据
Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或者JSON. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用JSON语句话,服务端 ...
- [Network] HTML、XML和JSON学习汇总
写在前面:楼主也是刚刚接触这方面的知识,之前完全是零基础,后来经朋友推荐了几个不错的博文,看完以后豁然开朗.但是此博文更加偏重于基础知识介绍(其实更深的楼主也还不了解,这方面的大神请绕道),只是分享个 ...
- xml和json的区别
本文转自SanMaoSpace的博客 链接地址如下:http://www.cnblogs.com/SanMaoSpace/p/3139186.html 1.定义介绍 (1).XML定义扩展标记语言 ( ...
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
- xStream完美转换XML、JSON
xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...
- 【原】iOS学习之XML与JSON两种数据结构比较和各自底层实现
1.XML与JSON两种数据结构的优缺点 1> XML 优点: 格式统一, 符合标准 容易与其他系统进行远程交互, 数据共享比较方便 缺点: XML文件格式文件庞大, 格式复杂, 传输占 ...
- C#读取XML文件的方法
先写一个xml文件: <?xml version="1.0" encoding="utf-8" ?> <bookste> <!-- ...
- C#.NET序列化XML、JSON、二进制微软自带DLL与newtonsoft(json.net)
序列化是将对象转换成另一种格式(XML.json.二进制byte[]) JSON序列化 .NET中有三种常用的JSON序列化的类,分别是: Newtonsoft.Json.JsonConvert类(推 ...
- XML与JSON的对比
XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类 ...
随机推荐
- Linux系统信息查看命令
一.系统 # uname -a #查看内核/操作系统/CPU信息 # head -n 1 /etc/issue #查看操作系统版本 # cat /proc/cpuinfo #查看CPU信息 # hos ...
- plsql programming 18 包
所谓包, 就是把一组PL/SQL 的代码元素组织在一个命名空间下. 另外, 包的用法就类似java中的类.( 有封装, 有重载, 没有继承和多肽) create or replace procedur ...
- HDU 1847 (博弈 找规律) Good Luck in CET-4 Everybody!
为了提高题解质量还是简单证明一下:3的倍数是必败状态. 如果n % 3 = 1,那么拿走1个石子:如果n % 3 = 2,那么拿走两个石子,都将转移到3的倍数的状态.所以每个必胜状态都有一个后继是必败 ...
- 漫游Kafka实现篇之分布式
Zookeeper节点标记 当路径中的元素包括在方括号里比如[xyz],则表示xyz表示的值是不固定的,每个可能的值都有一个Zookeeper节点.比如/topics/[topic]表示每个topic ...
- (转)beanUtil接口和类(有空的时候去看,到时候删除这个说明)
Jakarta Commons项目提供了相当丰富的API,我们之前了解到的Commons Lang只是众多API的比较核心的一小部分而已.Commons下面还有相当数量的子项目,用于解决各种各样不同方 ...
- 菜鸟学习笔记3——jQuery 选择器
jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...
- 【自动化测试】Xpath学习
http://www.cnblogs.com/cbcye/archive/2009/03/14/1411291.html http://www.cnblogs.com/cbcye/archive/20 ...
- yeoman bower grunt等安装
grunt-beginner前端自动化工具:http://www.imooc.com/learn/30 grunt的安装 官方站点:http://gruntjs.com/ 安装指令: sudo npm ...
- Android NDK OpenCV C++
NDK中的OpenCV http://blog.csdn.net/yanzi1225627/article/details/8525720
- Image.FromFile 方法锁住文件解决方法
Image.FromFile 一旦使用后,对应的文件在一直调用 其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修 ...