xml / json解析
来源:互联网 发布:网络最有名的改编歌曲 编辑:程序博客网 时间:2024/06/04 17:58
include “cocos2d.h”
include”network/HttpClient.h”
include
using namespace std;
using namespace cocos2d::network;
include “json/document.h”
include”json/rapidjson.h”//解析
include”json/stringbuffer.h”
include”json/writer.h”//修改
using namespace rapidjson;//json的操作 头文件盒命名解析
include”tinyxml2/tinyxml.h”
using namespace tinyxml2;//xml操作头文件盒命名空间
//网络请求数据
//Get
void httpGet()
{
HttpRequest * request = new HttpRequst();//一个网络请求
request->setUrl("http://42.96.151.161:83/service/userlogin?user_name=test12&user_password=123456");
//指定资源的位置get形势的 数据接在url后面 安全性低 数据量小 方便快捷
request->setRequestType(cocos2d::network::HttpRequst::Type::GET);//指明请求的类型request->setTag(“requestget”);//指定tagrequst->setResponseCallback(CC_CALLBACK_2(HelloWorld::httpcallback,this));//指定请求成功或者失败调用的函数//HttpCllient 在我们第一次请求的时候,会创建一个队列,并创建一个线程,线程指定的函数会查看队列有没有请求,如果有请求,线程会帮我们做网络请求,最后调用我们指定的httpcallbackHttpClient::getInstance()->send(request);//进行网络请求 send中会retain一次。request->release();//马上执行的语句
}
//Post
void HelloWorld::httpPost()
{
HttpRequest * request=new HttpRequest();
request->setUrl(“http://42.96.151.161:83/service/userlogin?”);
request->setRequestType(cocos2d::network::HttpRequest::Type::POST);
__String * str=__String::createWithFormat(“user_name=test12&user_password=123456”);
request->setRequestData(str->getCString(), str->length());
request->setTag(“httpPost”);
request->setResponseCallback(CC_CALLBACK_2(HelloWorld::httpcallback, this));//安全数据量大HttpClient::getInstance()->setTimeoutForConnect(30);//设置连接的超时时间HttpClient::getInstance()->setTimeoutForRead(30);//设置读取数据的超时时间HttpClient::getInstance()->send(request);request->release();
}
//数据请求的回调函数
void HelloWorld::httpcallback(HttpClient* client, HttpResponse* response)
{
if (!response)
{
return;
}
/*
1xx:指示信息--表示请求已接受,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
*/
log(“%li”,response->getResponseCode());
if (response->getResponseCode()==200)//200代表成功{ HttpRequest * request=response->getHttpRequest(); log("%s",request->getTag()); std::vector<char>*data=response->getResponseData();//获取服务器返回的数据 for (int i=0; i<data->size(); i++) { cout<<data->at(i); } cout<<endl;}
}
//UserDefault存储数据
void HelloWorld::userDefault()
{
UserDefault * d=UserDefault::getInstance();//单例
// 存储数据
// d->setIntegerForKey(“int1”, 10);
// d->setStringForKey(“string1”, “string1”);
// d->setBoolForKey(“bool1”, true);
// d->setDoubleForKey(“double1”, 10.0);
// d->flush();//强制写入文件 这些数据会写入到com.neworigin.httpdemo.plist
//log("%s",FileUtils::getInstance()->fullPathForFilename("HelloWorld.png").c_str());log("%i",d->getIntegerForKey("int1"));//如果没有,输出0log("%i",d->getIntegerForKey("int2",10));//如果没有,输出10log("%s",FileUtils::getInstance()->getWritablePath().c_str());//获取可读可写路径document data/data/com/neworigin/httpdemo/if (d->getBoolForKey("musicion",true)){ //checkbox 是选中的状态}else{ //checkbox 是非选中的状态}
}
//解析前
copyFile(“Chapters.xml”);//拷贝chapters.xml到可读可写的路径下
//文件复制
void HelloWorld::copyFile(std::string name)
{
string path1=FileUtils::getInstance()->fullPathForFilename(name);//.app 文件全路径
string path2=FileUtils::getInstance()->getWritablePath()+name;//获得可读可写的文件夹 +name
log(“%s”,path1.c_str());
log(“%s”,path2.c_str());
if (!FileUtils::getInstance()->isFileExist(path2))//在可读可写文件夹中没有文件{ string data=FileUtils::getInstance()->getStringFromFile(path1); FILE * file=fopen(path2.c_str(), "w");//以写的方式打开文件(“w”) 如果文件不存在会创建文件 fputs(data.c_str(), file);//写入内容 fclose(file);//关闭文件}
}
//xml解析
void HelloWorld::xmlDemo()
{
tinyxml2::XMLDocument doc;//document对象,可以对xml字符串进行解析
//获得xml字符串string path= FileUtils::getInstance()->getWritablePath()+"Chapters.xml";string data=FileUtils::getInstance()->getStringFromFile(path.c_str());//使用document对象解析字符串doc.Parse(data.c_str());//判断解析是否成功if (doc.Error()){ return;}//获取值XMLElement * rootElement=doc.RootElement();
XMLElement * element1_1=rootElement->FirstChildElement();
log(“%s”,element1_1->Value());
XMLElement * element1_1_1=element1_1->FirstChildElement();
log(“%s”,element1_1_1->Value());
log(“%s”,element1_1_1->GetText());
XMLElement * element1_1_2=element1_1_1->NextSiblingElement();
log(“%s”,element1_1_2->Value());
log(“%s”,element1_1_2->GetText());
XMLElement * element1_2=rootElement->FirstChildElement();XMLElement * element1_2_1=element1_2->NextSiblingElement()->FirstChildElement();log("%s",element1_2_1->Value());log("%s",element1_2_1->GetText());//修改XMLElement * ele=doc.RootElement()->FirstChildElement()->FirstChildElement()->NextSiblingElement();//<Number>1</Number>XMLNode * node=ele->FirstChild();node->SetValue("2");doc.SaveFile(path.c_str());//添加XMLElement * myelement=doc.NewElement("levels");//<levels></levels>XMLText * text=doc.NewText("1");myelement->LinkEndChild(text);doc.RootElement()->FirstChildElement()->InsertAfterChild(ele, myelement);//InsertAfterChild函数的调用者是想添加元素的父元素 第一个参数是在哪个元素之后添加我们指定的元素 第二个参数是需要添加的元素doc.SaveFile(path.c_str());//保存到文件//删除doc.DeleteNode(ele);//删除指定的文件doc.SaveFile(path.c_str());//保存到文件
}
//json解析
void HelloWorld::jsonDemo()
{
rapidjson::Document doc;//创建一个docunment对象
//doc.Parse<<#unsigned int parseFlags#>>(<#const Ch *str#>)//会开新空间
std::string path=FileUtils::getInstance()->getWritablePath()+”Data.json”;
std::string data=FileUtils::getInstance()->getStringFromFile(path.c_str());
doc.ParseInsitu<rapidjson::kParseInsituFlag>((char *)data.c_str());//在原空间操作 在原内存直接解析 这一步运行完成 就解析完成if(doc.HasParseError())//查看是否有错误{ return;}if (doc.HasMember("username"))//有没有这个元素{ log("%s",doc["username"].GetString());}if (doc.HasMember("costume")){ if (doc["costume"].IsObject()) { if (doc["costume"].HasMember("clothing")) { log("%s",doc["costume"]["clothing"].GetString()); } }}if (doc.HasMember("costume")){ if (doc["costume"].IsObject()) { if (doc["costume"].HasMember("headpiece")) { log("%s",doc["costume"]["headpiece"].GetString()); } }}if (doc.HasMember("weapon")){ if (doc["weapon"].IsArray()) { int i=0; log("%i",doc["weapon"][i].GetInt()); }}//修改__String * str=__String::createWithFormat("username");doc["username"].SetString(str->getCString(), str->length());//这样只是对doc对象中的数据修改了doc.AddMember("hp", "10", doc.GetAllocator());//添加一个元素doc.RemoveMember("levels");//删除元素//保存rapidjson::StringBuffer buffer;//用来放doc内容 字符串形势的rapidjson::Writer<rapidjson::StringBuffer>write(buffer);//可以把doc内容 改为字符串形势写入到buffer里面doc.Accept(write);//将doc内容写入到bufferFILE * file=fopen(path.c_str(), "w");if (file){ fputs(buffer.GetString(), file); fclose(file);}
}
- JSON解析,XML解析
- JSON解析、XML解析
- XML解析 JSON解析
- XML解析、Json解析
- JSON解析/XML解析
- xml和json解析
- 解析(xml,json)
- xml,json解析
- json和xml解析
- XML,JSON解析
- ruby解析json、xml
- [ios]xml, json解析
- xml json 解析
- JSON VS XML 解析
- XML和JSON解析
- 解析(json、xml)
- XML.JSON数据结构解析
- IOS-XML&JSON解析
- 【测试入门序列】如何用 DataX 导数据
- Spring常用注解
- CSS3 Flexbox布局
- 心理学定律第三篇
- windows下 composer常见问题及处理
- xml / json解析
- su和sudo命令的区别
- android studio中新建assets,用webview加载本地图片
- 批量导入(单文件的文件上传 + 解析上传的csv文件 ,导入至数据库 ,反馈信息)
- html5的新增的标签和废除的标签
- 锁与并发-SQL Server
- Qt5.5.1 + OpenCV2.4.10 环境配置
- ThreadPoolExecutor参数说明
- IPC概述