我用的是2.1.4的cocos2d-x,里面自带有tinyxml2库。

导入头文件:
#include "support/tinyxml2/tinyxml2.h"

using namespace tinyxml2;

一:创建xml并保存

void TinyXmlDemo::createTinyXMLFile()
{
//储存XML文件的路径
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "tinyxmltest.xml";
//xml文档
tinyxml2::XMLDocument* pDoc = new tinyxml2::XMLDocument();
if (pDoc == NULL)
{
return;
}
//xml声明
XMLDeclaration* pDecl = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");
if (pDecl == NULL)
{
return;
}
pDoc->LinkEndChild(pDecl);
//节点plist
XMLElement* plistElement = pDoc->NewElement("plist");
plistElement->SetAttribute("version","1.0");
pDoc->LinkEndChild(plistElement); //节点dict
XMLElement* dictElement = pDoc->NewElement("dict");
plistElement->LinkEndChild(dictElement);
//节点key
XMLElement* keyElement = pDoc->NewElement("key");
keyElement->LinkEndChild(pDoc->NewText("keyText"));//给节点设置值
dictElement->LinkEndChild(keyElement);
//节点string
XMLElement* stringElement = pDoc->NewElement("string");
stringElement->LinkEndChild(pDoc->NewText("stringText"));//给节点设置值
dictElement->LinkEndChild(stringElement);
//节点array
XMLElement* arrayElemet = pDoc->NewElement("array");
dictElement->LinkEndChild(arrayElemet);
for (int i = ; i<; i++)
{
XMLElement* strEle = pDoc->NewElement("string");
strEle->LinkEndChild(pDoc->NewText("icon"));
arrayElemet->LinkEndChild(strEle);
}
//保存文件
pDoc->SaveFile(filePath.c_str());
delete pDoc; }

在win32上xml保存的路径是在D:\cocos2d-x-2.1.4\cocos2d-x-2.1.4\Debug.win32里面

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>keyText</key>
<string>stringText</string>
<array>
<string>icon</string>
<string>icon</string>
<string>icon</string>
</array>
</dict>
</plist>

二:解析xml

void TinyXmlDemo::parseTinyXMLFile()
{
//储存XML文件的路径
std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "tinyxmltest.xml";
tinyxml2::XMLDocument* pDoc = new tinyxml2::XMLDocument();
pDoc->LoadFile(filePath.c_str());
//得到根节点
XMLElement* rootElement = pDoc->RootElement();
//打印根节点名字和值
CCLog("%s,%s",rootElement->Value(),rootElement->GetText());
//节点的第一个属性
const XMLAttribute* attribute = rootElement->FirstAttribute();
//打印属性的名字和值
CCLog("%s %s",attribute->Name(),attribute->Value());
//查找节点的属性值
float value = 0.1f;
rootElement->QueryFloatAttribute("version",&value);
CCLog("%f",value);
//设置节点属性值
rootElement->SetAttribute("version", 1.4);
//跟节点的第一个字节点 dict
XMLElement *dictEle = rootElement->FirstChildElement();
//dict下面的子节点 key
XMLElement *keyEle = dictEle->FirstChildElement();
//打印key节点的值
CCLog("%s,%s",keyEle->Name(),keyEle->GetText());
//key节点的next节点 string
XMLElement *stringEle = keyEle->NextSiblingElement();
CCLog("%s,%s",stringEle->Name(),stringEle->GetText());
//string节点的子节点
XMLElement *nulXmlEle = stringEle->FirstChildElement();
if (NULL == nulXmlEle) {
CCLog("string no childElement");
}
//array节点
XMLElement *arrayEle= stringEle->NextSiblingElement();
CCLog("%s,%s",arrayEle->Name(),arrayEle->GetText());
XMLElement *array1 = arrayEle->FirstChildElement();
CCLog("%s,%s",array1->Name(),array1->GetText());
XMLElement *array2 = array1->NextSiblingElement();
CCLog("%s,%s",array2->Name(),array2->GetText());
XMLElement *array3 = arrayEle->LastChildElement();
CCLog("%s,%s",array3->Name(),array3->GetText()); //修改了xml记得保存
pDoc->SaveFile(filePath.c_str());
}

打印输出:

plist,(null)
version 1.0
1.000000
key,keyText
string,stringText
string no childElement
array,(null)
string,icon
string,icon
string,icon

由于修改了节点属性值,保存后的xml

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.4">
<dict>
<key>keyText</key>
<string>stringText</string>
<array>
<string>icon</string>
<string>icon</string>
<string>icon</string>
</array>
</dict>
</plist>

参考http://blog.csdn.net/w18767104183/article/details/19837203

cocos2d-x使用tinyxml2存储解析xml的更多相关文章

  1. 使用tinyxml2库解析xml

    tinyxml2简介 tinyxml2是c++编写的轻量级的xml解析器,而且是开放源代码的,在一些开源的游戏引擎中用的比较多.源码托管在github上. 源码地址:https://github.co ...

  2. 7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml

     数据本地化 A CCUserDefault 系统会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.win32\Debug.win32下生成一个名为UserDef ...

  3. 《转》 在C++中使用TinyXML2解析xml

    读取和设置xml配置文件是最经常使用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,由于它的API接口和Java的十分类似.面向对象性非常好.       TinyX ...

  4. Android 数据存储(XML解析)

      在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xml,xml是与平台无关的特性,被广泛运用于数据通信中,那么在android中如何解析xml文件数据 ...

  5. android菜鸟学习笔记19----Android数据存储(三)XML文件的解析及序列化

    Android内置了PULL解析器的XPP3实现,以及SAX解析器等,可以直接使用PULL或SAX解析XML,直接把JAVA中进行PULL或SAX解析的代码直接拿来用,遗忘的话,可以参考java拾遗1 ...

  6. 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&CCMutableDictionary使用与注意!

    本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/694.html ☞ ...

  7. cocos2d-x解析xml时的Bug

    cocos2d-x中使用tinyxml解析xml配置.如下: tinyxml2::XMLDocument doc; if (tinyxml2::XML_SUCCESS != doc.LoadFile( ...

  8. cocos2d-x 显示中文字符和解析XML文件 转载

    源地址:http://codingnow.cn/cocos2d-x/1038.html 在cocos2d-x中直接显示中文的时候会出现乱码,虽然在实际开发中把字符串直接写在代码里也不是好的做法,但是有 ...

  9. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

随机推荐

  1. C++实现网格水印之调试笔记(一)

    首先说一下我的一些简单的调试方法,除了常规的断点调试之外,我还会使用注释的方法来调试.当整个工程代码量相当多且调用层次关系较为复杂时,这种方法能够比较高效的定位到出错误的代码段或某个函数,然后在出现错 ...

  2. CodeForce---Educational Codeforces Round 3 D. Gadgets for dollars and pounds 正题

    对于这题笔者无解,只有手抄一份正解过来了: 基本思想就是 : 二分答案,对于第x天,计算它最少的花费f(x),<=s就是可行的,这是一个单调的函数,所以可以二分. 对于f(x)的计算,我用了nl ...

  3. Spring 中context.start作用

    我们经常会看到 如下代码 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(configPath. ...

  4. CSS 3的display:盒类型详解

    在CSS中,使用display属性来定义盒的类型.总体来说,盒类型分为两类:inline和block.如div默认是block,span默认是Inline.可以通过display修改默认的表现方式. ...

  5. 网站繁简切换的JS遇到的一个BUG

    公司打算进入台湾市场,最近开发了繁体版本的网站,数据库里的信息全是简体,除了网页上固定的文字手动翻译了,文章内容标题都不是繁体. 于是在网上找了一段比较流行的繁简切换的JS实现了,不过后来却发现,有些 ...

  6. 设置mysql 在mac中的环境变量

    在mac os的用户目录下有一个隐藏文件.bash_profile,编辑它就可以完成环境变量的创建. 比如要将mysql的运行目录加到环境变量中,可以在.bash_profile中新增如下一行: ex ...

  7. 国外PHP学习网站书籍资料汇总

    这篇文章汇总了全面多样的PHP学习资源,包括书籍.网站.文章等,帮助你提高PHP开发能力,巩固PHP知识.结合上一篇<重磅资料!Github上的PHP资源汇总大全>,一定可以让你的PHP技 ...

  8. Hibernate之基于外键映射的一对一(1-1)关联关系

    1.对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素.为many-to-one元素增加unique="true"属性来表示为1 ...

  9. 在Delphi7中JSON遍历节点不支持使用IN处理方法

    相关资料:http://www.cnblogs.com/del/archive/2009/10/23/1588690.html Delphi2007源代码: procedure TForm1.Butt ...

  10. Linux下的JDK安装rpm命令详解

    1. 安装程序 #rpm -ivh jdk-7u79-linux-x64.rpm 出现安装协议等,按接受即可. 2.设置环境变量. #vi /etc/profile JAVA_HOME=/usr/ja ...