Cocos2d-x 已经加入了tinyxml2用于xml的解析。3.0版本位于external/tinyxml2下。2.x版本位于cocos2dx/support/tinyxml2下。

tinyxml2 Github地址:https://github.com/leethomason/tinyxml2

帮助文档地址:http://grinninglizard.com/tinyxml2docs/index.html

生成xml文档

  1. 引入头文件

    #include "tinyxml2/tinyxml2.h"
    using namespace tinyxml2;
  2. xml文档生成

    void  HelloWorld::makeXML(const char *fileName)
    {
    std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName; XMLDocument *pDoc = new XMLDocument(); //xml 声明(参数可选)
    XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\""); pDoc->LinkEndChild(pDel); //添加plist节点
    XMLElement *plistElement = pDoc->NewElement("plist");
    plistElement->SetAttribute("version", "1.0");
    pDoc->LinkEndChild(plistElement); XMLComment *commentElement = pDoc->NewComment("this is xml comment");
    plistElement->LinkEndChild(commentElement); //添加dic节点
    XMLElement *dicElement = pDoc->NewElement("dic");
    plistElement->LinkEndChild(dicElement); //添加key节点
    XMLElement *keyElement = pDoc->NewElement("key");
    keyElement->LinkEndChild(pDoc->NewText("Text"));
    dicElement->LinkEndChild(keyElement); XMLElement *arrayElement = pDoc->NewElement("array");
    dicElement->LinkEndChild(arrayElement); for (int i = 0; i<3; i++) {
    XMLElement *elm = pDoc->NewElement("name");
    elm->LinkEndChild(pDoc->NewText("Cocos2d-x"));
    arrayElement->LinkEndChild(elm);
    } pDoc->SaveFile(filePath.c_str());
    pDoc->Print(); delete pDoc;
    }
  3. 打印结果

    <?xml version="1.0" encoding="UTF-8"?>
    <plist version="1.0">
    <!--this is xml comment-->
    <dic>
    <key>Text</key>
    <array>
    <name>Cocos2d-x</name>
    <name>Cocos2d-x</name>
    <name>Cocos2d-x</name>
    </array>
    </dic>
    </plist>

上面代码使用tinyxml简单生成了一个xml文档。

解析xml

下面我们就来解析上面创建的xml文档

  1. 引入头文件

    #include "tinyxml2/tinyxml2.h"
    using namespace tinyxml2;
  2. xml解析


    void HelloWorld::parseXML(const char *fileName)
    { std::string filePath = FileUtils::getInstance()->getWritablePath() + fileName;
    XMLDocument *pDoc = new XMLDocument();
    XMLError errorId = pDoc->LoadFile(filePath.c_str()); if (errorId != 0) {
    //xml格式错误
    return;
    } XMLElement *rootEle = pDoc->RootElement(); //获取第一个节点属性
    const XMLAttribute *attribute = rootEle->FirstAttribute();
    //打印节点属性名和值
    log("attribute_name = %s,attribute_value = %s", attribute->Name(), attribute->Value()); XMLElement *dicEle = rootEle->FirstChildElement("dic");
    XMLElement *keyEle = dicEle->FirstChildElement("key");
    if (keyEle) {
    log("keyEle Text= %s", keyEle->GetText());
    } XMLElement *arrayEle = keyEle->NextSiblingElement();
    XMLElement *childEle = arrayEle->FirstChildElement();
    while ( childEle ) {
    log("childEle Text= %s", childEle->GetText());
    childEle = childEle->NextSiblingElement();
    } delete pDoc; }

    在节点解析过程中,注意对获取到的节点进行判空处理。

  3. 解析结果打印

    cocos2d: attribute_name = version,attribute_value = 1.0
    cocos2d: keyEle Text= Text
    cocos2d: childEle Text= Cocos2d-x
    cocos2d: childEle Text= Cocos2d-x
    cocos2d: childEle Text= Cocos2d-x

小结

上面的简单示例,演示了如何使用tinyxml进行xml文档生成和解析。更多详细的帮助请参考 tinyxml帮助文档http://grinninglizard.com/tinyxml2docs/index.html

(28)Cocos2d-x xml解析的更多相关文章

  1. Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析

    Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...

  2. 【Cocos2d-x游戏引擎开发笔记(25)】XML解析

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/9128819 XML是一种非常重要的文件格式,由于C++对XML的支持非常完善 ...

  3. JSON解析和XML解析对比

    JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...

  4. 【Android】实现XML解析的几种技术

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  5. iOS 网络编程:XML解析

    1 XML文档结构 1.1 简介 XML 指可扩展标记语言(eXtensible Markup Language).XML 被设计用来传输和存储数据.其非常像HTML的标记语言,但与之不同的是,XML ...

  6. XML 解析中,如何排除控制字符

    XML 解析中,如何排除控制字符 今天在解析一个中文的 XML时,始终报错 PCDATA invalid Char value 21 in Entity ,查询了一下这个 21 的ascii 值,发现 ...

  7. Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)

    *Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...

  8. 深入解读XML解析

    一.XML是什么?有什么用? XML是指.作为配置文件存在 二.XML的基本语法 1.文档声明:很重要 在编写XML文档时,需要先使用文档声明来声明XML文档.且必须出现在文档的第一行. 作用:告知解 ...

  9. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

随机推荐

  1. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  2. ios 获取手机相关的信息

    获取手机信息      应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 //获取版本号 NSDictionary *infoDict = [[NSBundl ...

  3. docker 配置文件:/etc/docker/daemon.json

    /etc/docker/daemon.json 是 docker 的配置文件,默认是没有的,需要我们手动创建,可配置项如下: [root@localhost ~]$ vim /etc/docker/d ...

  4. osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib

    将Triton-MT-DLL修改为Triton-MT-DLL-NODX

  5. Android UI优化——include、merge 、ViewStub

    在布局优化中,Androi的官方提到了这三种布局<include />.<merge />.<ViewStub />,并介绍了这三种布局各有的优势,下面也是简单说一 ...

  6. m2014-architecture-webserver->百万记录级mysql数据库及Discuz!论坛优化

    作者:shunz,出处:http://shunz.net/2008/06/mysql_discuz_.html 最近,帮一个朋友优化一个拥有20万主题,100万帖子,3万多会员,平均在线人数2000人 ...

  7. mac 类似Xshell

    ssh -t root@12.23.34.45 -p 22 ssh -t 用户名@IP地址 -p 端口

  8. 多线程的学习与GDI的学习

    今天又是一周的周五,感觉过的好快,我感觉不是期盼周末的到来,而是感觉现在已经习惯啦每天坐在这里敲代码,其实我是一个性格非常开朗的女生,现在不知道为什么感觉默默地坐在自己位置上面敲代码成为了我习以为常的 ...

  9. 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)

    在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...

  10. 国内linux 镜像

    北京理工大学开源软件镜像服务mirrors.ustc.edu.cn 开源中国社区软件镜像下载资源库mirrors.oss.org.cn 阿里云开源镜像站mirrors.aliyun.com<ig ...