我用的是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. <转>准备Eclips+python+robot framework环境

    关于python: path添加:C:\Python27;C:\Python27\Scripts; 新加一项:  PYTHON_HOME    C:\Python27 再不行的话,加一个用户变量: P ...

  2. Jmeter教程

    博客园 http://www.cnblogs.com/yangxia-test/category/431240.html 1)分析能力没有LoadRunner详细 2)jmeter不支持IP欺骗,而L ...

  3. 使用Qmake在树莓派上开发Opencv程序

    Qt 安装 PC 端  下载安装即可 https://mirrors.ustc.edu.cn/qtproject/official_releases/qt 树莓派:Qt开发套件和opencv安装sud ...

  4. Python 核心数据类型

    1.Python中一切皆对象 2.Python中不需要申明对象类型,对象的类型由运行的表达式决定 3.创建了对象意味着绑定了对象的操作到此对象,也就是在固有的对象上只能调用该对象特有的操作.比如只能将 ...

  5. window.parent 判断是否是被嵌入iframe里面

    项目中有个这样逻辑:B页面嵌套A页面 如图下: 但是B页面有可能独立出来.所以判断B页面是否被嵌入进去则使用 window.parent==window 如果是true B页面是独立的,false B ...

  6. C++中的重载,隐藏,覆盖,虚函数,多态浅析

    直到今日,才发现自己对重载的认识长时间以来都是错误的.幸亏现在得以纠正,真的是恐怖万分,雷人至极.一直以来,我认为重载可以发生在基类和派生类之间,例如: class A { public: void ...

  7. NetAdvantage 笔记

    1.UltraControlBase Class Members 1.BeginUpdate Method Sets the IsUpdating flag to true which prevent ...

  8. Crontab设置定时任务

    ​ Crontab文件格式 文件格式: minute hour day month weekday username command 格式解析 字段 描述 minute 分,值为0-59 hour 小 ...

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

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

  10. C++ Name Mangling 为什么不编码返回值参数

    这篇文章主要是推荐下 http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html 这篇文章从编译器的角度看问题,比较深入. 回到题目,为 ...