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. RMQ LAC 入门

    RMQ RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大) ...

  2. jQuery之ajaxForm提交表单

      1.jQuery的设计非常优雅,其源代码亦给人以美感,利用jQuery框架写出来的js既简练又能完美跨浏览器.   2.jquery form插件是基于jQuery开发的一套能够利用ajax技术提 ...

  3. thinkphp5.0开发规范

    命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录不强制规范,驼峰及小写+下划线模式均支持: 类库.函数文件统一以.php为后缀: 类的文 ...

  4. fedora/centos7防火墙FirewallD详解

    1 使用 FirewallD 构建动态防火墙 1.1 “守护进程” 1.2 静态防火墙(system-config-firewall/lokkit) 1.3 使用 iptables 和 ip6tabl ...

  5. LeetCode——pow(x, n)

    超时了,只能先这么干了. return Math.pow(x, n);

  6. 【BZOJ1713】[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会 斜率优化

    [BZOJ1713][Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会 Description Input 第1行输入N,之后N ...

  7. ListView之EmptyView

    From:http://blog.csdn.net/xiangqiao123/article/details/17994099 继承ListActivity比较方便 最新开发一个应用程序,需要用到当L ...

  8. OC开发_Storyboard——iPad开发

    iPad开发(Universal Applications) 一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterf ...

  9. 【node】---socket---网络通信---【巷子】

    1.什么是一个socket? 网络上两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为socket 2.http与socket的区别 在以前我们实现数据交换已经有了HTTP协议,为什么还要 ...

  10. 170808、生成为CVS文件

    /** * Desc : 生成为CVS文件 * User : RICK * @param data 源数据List * @param map csv文件的列表头map * @param outPutP ...