cocos2dx读写XML

前端之家收集整理的这篇文章主要介绍了cocos2dx读写XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

首先包含头文件 该头文件cocos已自带

#include@H_403_6@"tinyxml2/tinyxml2.h"

using@H_403_6@namespace@H_403_6@tinyxml2@H_403_6@;@H_403_6@


//data.xml文件内容

<Chapters>@H_403_6@

@H_403_6@<Chapter>@H_403_6@

@H_403_6@<Name>Misty Vale</Name>@H_403_6@

@H_403_6@<Number>1</Number>@H_403_6@

<Unlocked>1</Unlocked>@H_403_6@

@H_403_6@</Chapter>@H_403_6@

@H_403_6@<Name>Bamboo Vale</Name>@H_403_6@

@H_403_6@<Number>2</Number>@H_403_6@

<Unlocked>0</Unlocked>@H_403_6@

@H_403_6@<Name>Wind Vale</Name>@H_403_6@

@H_403_6@<Number>3</Number>@H_403_6@

@H_403_6@<Name>Kunlun Mountain</Name>@H_403_6@

@H_403_6@<Number>4</Number>@H_403_6@

@H_403_6@<Name>Happy Vale</Name>@H_403_6@

@H_403_6@<Number>5</Number>@H_403_6@

</Chapters>@H_403_6@


具体代码

FileUtils* f = FileUtils::getInstance();

@H_403_6@//@H_403_6@获得可写的具体文件路径

std::string path = f -> getWritablePath();

std::string xmlPath = path + std::string("data.xml");

log("%s",xmlPath.c_str());

XMLDocument* myDocument = new XMLDocument();

XMLError errorID = myDocument -> LoadFile(xmlPath.c_str());

@H_403_6@//@H_403_6@判断是否解析错误

if (errorID != 0) {

log("Parse Error!");

delete myDocument;

return;

}

//获取根节点@H_403_6@

XMLElement* RootElement=myDocument->RootElement();

CCLOG("RoorKey=%s",RootElement->Value());//获取建@H_403_6@

log("RootValue=%s",RootElement->GetText());//获取值@H_403_6@

XMLElement *chapterElement = RootElement->FirstChildElement();//RootElement下的第一个@H_403_6@

log("1chapterElement=%s",chapterElement->Value());

获取值@H_403_6@

XMLElement *element = chapterElement->NextSiblingElement();//chapterElement->NextSiblingElement()如果取不到节点了,则为空,可以搭配@H_403_6@while语句遍历所有节点@H_403_6@

log("2chapterElement=%s",element->Value());//RootElement下的第二个@H_403_6@

XMLElement *nameElement = element->FirstChildElement();//element下的第一个@H_403_6@

log("nameElement:%s",nameElement->Value());

log("nameElementValue:%s",nameElement->GetText());

XMLElement *numElement = nameElement->NextSiblingElement();//element下的第二个,即@H_403_6@nameElement的下一个@H_403_6@

log("num%s",numElement->Value());//获取键@H_403_6@

log("numValue%s",numElement->GetText());//这里获取值@H_403_6@

//修改节点@H_403_6@

XMLNode *oldNode = numElement->FirstChild();//注意分析@H_403_6@FirstChild和@H_403_6@FirstChildElement的区别@H_403_6@

log("oldNodeValue:%s",oldNode->Value());

oldNode->SetValue("xiugaileeeeee"); //注意这里要用父类的节点调用,否则会不起作用@H_403_6@

myDocument->SaveFile(xmlPath.c_str());//这个将修改保存到文件@H_403_6@

@H_403_6@//@H_403_6@添加节点,需要使用父类节点调用,若使用同等级的子节点,则会作为起子节点添加

XMLElement* Broadcast_Pid = myDocument->NewElement("AGE");//<AGE></AGE>

XMLText *text1 =myDocument->NewText("3333");

Broadcast_Pid->SetAttribute("info","the pid");

Broadcast_Pid->LinkEndChild(text1);//<AGE info=the pid>3333</AGE>

chapterElement->LinkEndChild(Broadcast_Pid);//最后把这个节点又加上了@H_403_6@

myDocument->SaveFile(xmlPath.c_str());

//移除节点@H_403_6@

XMLElement* nameNode=chapterElement->FirstChildElement();

chapterElement->DeleteChild(nameNode);

delete myDocument;

原文链接:https://www.f2er.com/cocos2dx/338960.html

猜你在找的Cocos2d-x相关文章