Cocos2d-x xml解析

Cocos2d-x xml解析

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

时间: 2024-10-14 14:16:27

Cocos2d-x xml解析的相关文章

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

Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidjson/wiki:http://code.google.com/p/rapidjson/wiki/UserGuide 下面就通过实例代码讲解rapidjson的用法. 使用rapidjson解析json串 引入头文件 1 2 #include "json/rapidjson.h" #inc

iOS xml解析

iOS xml 解析方法有两种:SAX , DOM. SAX 不用借助第三方,在解析过程中逐行解析.(NSXMLParser,需要实现代理),具体步骤: 1.获取文件路径. 2.创建 NSXMLParser 对象. 3.遵守协议,设置代理. 4.实现代理方法 1>- (void)parserDidStartDocument:  ---- 开始解析 2>- (void)parserDidEndDocument: ----解析结束 3>- (void)parser:didStartEleme

XML解析

3.1 XML简单介绍 (1) XML:可扩展标记语言 a.语法 b.XML文档的三部分(声明.元素和属性) c.其它注意点(注意不能交叉包含.空行换行.XML文档只能有一个根元素等) (2) XML解析 a.XML解析的两种方式 001 SAX:从根元素开始,按顺序一个元素一个元素的往下解析,可用于解析大.小文件 002 DOM:一次性将整个XML文档加载到内存中,适合较小的文件 b.解析XML的工具 001 苹果原生NSXMLParser:使用SAX方式解析,使用简单 002 第三方框架 l

JAVASE02-Unit012: Unit07: XML语法 、 XML解析

Unit07: XML语法 . XML解析 emplist.xml <?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>张三</name> <age>34</age> <gender>男</gender> <salary>3000</salary

iOS -数据库网络之xml解析

XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax) 1.IOS中XML文件获取 首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: //获取xml完整路径 NSString * path=[[NSBundle mainBundle] [email protected]"xml文件名称" ofType:@"xml"]; //读取文件到内存 NSData* data=[NSData dataWithConte

XML解析(转)

非原创,转载自http://my.oschina.net/khakiloveyty/blog/396671 xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundation/Foundation.h> @interface FKBook : NSObject @property (nonatomic , assign) NSInteger bookID; @p

iOS网络数据解析之XML解析-GDataXML

GDataXML 第三方xml解析框架 DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件 GDataXML中常用的类 GDataXMLDocument: 代表整个XML文档 GDataXMLElement: 代表文档中的每个元素 使用attributeForName:方法可以获得属性值 要使用GDataXML,先要对项目进行一些配置.1>导入libxml2动态库targets--Build Phases--link Binary With Libraries 2>设置libxm

ios之json,xml解析

JSON解析步骤: 1.获取json文件路径 NSString*path = [[NSBundle mainBundle] pathForResource:@"Teacher"ofType:@"json"]; 2.读取文件中的data NSData *data = [NSData dataWithContentsOfFile:path]; 3.把data转化为可变数组或者可变字典 是字典还是数组要看json最外层数据是什么.NSJSONSerialization是重

android之XML解析

所谓SAX,就是SAX simple API for XML,是一个解析XML文件的简单API. SAX解析XML的工作原理,是对文档进行顺序扫描,当扫描到文档开始与结束,元素开始与结束,触发相应的响应函数.是一种事件驱动型的解析方式.它可以在解析文档的任意时刻停止解析. 通过该图我们可以大概了解解析的过程. private void parse(String xmlString,List<Mp3Info> infos){ // SAXParserFactory 是一个使用工厂模式的类 SAX