cocos2d-x使用tinyxml2存储解析xml

时间:2022-10-02 18:57:48

我用的是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&period;数据本地化CCString&comma;CCArray&comma;CCDictionary&comma;tinyxml2,写入UserDefault&period;xml文件&comma;操作xml,解析xml

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

  3. 《转》 在C&plus;&plus;中使用TinyXML2解析xml

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

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

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

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

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

  6. 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据&amp&semi;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&comma;sax解析xml

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

随机推荐

  1. Leetcode 107 Binary Tree Level Order Traversal II 二叉树&plus;BFS

    题意是倒过来层次遍历二叉树 下面我介绍下BFS的基本框架,所有的BFS都是这样写的 struct Nodetype { int d;//层数即遍历深度 KeyType m;//相应的节点值 } que ...

  2. 教你怎样写自定义IP地址算法

    通过IP地址可以看到算法规律,写成自定义IP地址,也可以把IP地址转为自定格式的IP地址.也可以用于加密一些明文数字.起始次方可自定义(以1次方和0次方为例) a.以下写正反算法(以1次方为最小单位) ...

  3. VS简介

    visual studio2012 代码编程常用工具 1.起始页,存放一些方便打开的快捷方式,开始-新建项目-打开项目 2.最近-最近的项目 3.视图里面有一系列面板,窗口,比如起始页,工具箱,文档大 ...

  4. 文成小盆友python-num11-(2) python操作Memcache Redis

    本部分主要内容: python操作memcache python操作redis 一.python 操作 memcache memcache是一套分布式的高速缓存系统,由LiveJournal的Brad ...

  5. JDBC----数据库连接池(connection pool)

    •数据库连接池的基本思想就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再 ...

  6. poj1269

    基础题,直线间关系 #include <iostream> #include <math.h> #include <iomanip> #define eps 1e- ...

  7. 比较JqGrid与XtraGrid

    此只能比较两者的功能优劣,实现某种功能.效果的方便性和效率.首先分别粗略介绍XtraGrid和jqGrid DevExpress是目前.net下最为强大和完整的UI控件库, XtraGrid是这个控件 ...

  8. JS的变量的值怎么传递给PHP的变量?

    get: <script> name="xxx"; window.location='xxx.php? name='+name; post: <script&gt ...

  9. apache配置一个域名读取多个路径代码&lpar;包括主干和分支&rpar;

    <VirtualHost *:80> ServerAdmin 651629095@qq.com DocumentRoot "C:/wamp/www/sms/trunk/publi ...

  10. c&plus;&plus; shared&lowbar;ptr的使用

    shared_ptr.是c++为了提高指针安全性而添加的智能指针,方便了内存管理.功能非常强大,非常强大,非常强大(不单单是shared_ptr,配合week_ptr以及enable_share_fr ...