头文件helloword.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include "cocos-ext.h"
#include "libjson.h"
#include "tinyxml.h"
USING_NS_CC_EXT;
USING_NS_CC;
class HelloWorld : public cocos2d::CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene();
void menuCloseCallback(CCObject* pSender);
CREATE_FUNC(HelloWorld);
void json();
void jsonparse(JSONNode &n);
void xml();
};
#endif // __HELLOWORLD_SCENE_H__
helloword.cpp的内容,使用两者的方法
#include "HelloWorldScene.h"
#include "variate.h"
#include "cocos-ext.h"
#include <fstream>
using namespace std;
USING_NS_CC_EXT;
USING_NS_CC;
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCMenuItemFont *font=CCMenuItemFont::create("json");
font->setFontSize(30);
font->setAnchorPoint(ccp(0, 0));
font->setPosition(ccp(40, 8));
CCMenuItemFont *font2=CCMenuItemFont::create("xml");
font2->setAnchorPoint(ccp(0, 0));
font2->setPosition(ccp(40, 8));
CCMenuItemImage *image1=CCMenuItemImage::create("btn-test-0.png", "btn-test-0.png", this, menu_selector(HelloWorld::json));
image1->addChild(font);
CCMenuItemImage *image2=CCMenuItemImage::create("btn-test-0.png", "btn-test-0.png", this, menu_selector(HelloWorld::xml));
image2->addChild(font2);
CCMenu *menu=CCMenu::create(image1,image2,NULL);
menu->alignItemsVertically();//menu->alignItemsHorizontally();
menu->setPosition(Visibel_mid.x, Visibel_mid.y-100);
addChild(menu);
return true;
}
void HelloWorld::json()
{
JSONNode n(JSON_NODE);
n.push_back(JSONNode("child", "this is a child json"));
JSONNode n1(JSON_NODE);
JSONNode n2(JSON_NODE);
n1.push_back(JSONNode("child a", "this is child a"));
n1.push_back(JSONNode("child b", "this is child b"));
n2.push_back(JSONNode("child c", "this is child c"));
n2.push_back(JSONNode("child d", "this is child d"));
n2.push_back(JSONNode("child e", "this is child e"));
JSONNode array(JSON_ARRAY);
array.set_name("name");
array.push_back(n1);
array.push_back(n2);
n.push_back(array);
cout<<n.write_formatted();
//数据化的持久化存储
string datapath=CCFileUtils::sharedFileUtils()->getWritablePath()+"info.text";
fstream files;
files.open(datapath.c_str(),ios::out);
files<<n.write_formatted();
files.close();
CCLOG("%s",datapath.c_str());
//读取文章内容
CCString *contentstr=CCString::createWithContentsOfFile(datapath.c_str());
JSONNode jsonnode=libjson::parse(contentstr->getCString());
this->jsonparse(jsonnode);
}
void HelloWorld::jsonparse(JSONNode &n)
{
JSONNode::json_iterator itror=n.begin();
while (itror!=n.end()) {
if (itror->type()!=JSON_NODE||itror->type()!=JSON_ARRAY) {
jsonparse(*itror);
}
if (itror->name()=="child") {
CCLOG("%s",itror->as_string().c_str());
}
if (itror->name()=="child a") {
CCLOG("%s",itror->as_string().c_str());
}
if (itror->name()=="child b") {
CCLOG("%s",itror->as_string().c_str());
}
if (itror->name()=="child c") {
CCLOG("%s",itror->as_string().c_str());
}
if (itror->name()=="child d") {
CCLOG("%s",itror->as_string().c_str());
}
if (itror->name()=="child e") {
CCLOG("%s",itror->as_string().c_str());
}
itror++;
}
}
void HelloWorld::xml()
{
//源文件
string bundle = CCFileUtils::sharedFileUtils()->fullPathForFilename("news.xml");
//获取文件内容
CCString *stringpp=CCString::createWithContentsOfFile(bundle.c_str());
//获取沙盒地址
string xmlpath=CCFileUtils::sharedFileUtils()->getWritablePath()+"new.xml";
CCLog("%s",xmlpath.c_str());
fstream file;
file.open(xmlpath.c_str(),ios::out);
file<<stringpp->getCString();
file.close();
TiXmlDocument *document=new TiXmlDocument(xmlpath.c_str());
document->LoadFile();//加载文件
TiXmlElement *rootelement=document->RootElement();
cout<<rootelement->Value()<<endl;
//一级一级获取
TiXmlElement *channel=rootelement->FirstChildElement();
TiXmlElement *title=channel->FirstChildElement();
cout<<title->Value()<<endl;
//获取兄弟节点
TiXmlElement *link=title->NextSiblingElement("link");
// TiXmlElement *link=title->NextSiblingElement()->NextSiblingElement()
// ->NextSiblingElement();
cout<<link->GetText()<<endl;
//增加
TiXmlElement *newelement=new TiXmlElement("channel");
newelement->SetAttribute("name", "123");
TiXmlText text("uuuuuuuuuuuuuuu");
newelement->LinkEndChild(&text);
//rootelement->InsertEndChild(*newelement);//加到末尾
rootelement->InsertBeforeChild(rootelement->FirstChildElement(), *newelement);
document->SaveFile();
//替换
TiXmlElement *newelement1=new TiXmlElement("csdf");
newelement1->SetAttribute("ndf", "sdf3");
TiXmlText text1("dsfsuuuu");
newelement1->LinkEndChild(&text1);
rootelement->ReplaceChild(rootelement->FirstChildElement(), *newelement1);
document->SaveFile();
//删除
// rootelement->RemoveChild(rootelement->FirstChildElement()->NextSiblingElement());
// document->SaveFile();
TiXmlElement *two=new TiXmlElement("title");
//TiXmlText text2("yyyy");
two->LinkEndChild(newelement);
rootelement->InsertEndChild(*two);
document->SaveFile();
}
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) || (CC_TARGET_PLATFORM == CC_PLATFORM_WP8)
CCMessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
#else
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
#endif
}