现在的位置: 首页 > 综合 > 正文

使用TinyXml 解析XML文件

2013年02月10日 ⁄ 综合 ⁄ 共 2166字 ⁄ 字号 评论关闭

在做开发的时候,经常会使用XML的情况,在使用XML的时候,很多情况下会解析XML,那么我们来看一下在cocos2d-x中如何使用TinnyXML来解析XML文件获取到我们需要的数据!

废话不多说,先看看例子XML的格式和内容:

[html] view
plain
copy

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <entity level="1" data="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2"/>  
  3. <entity level="2" data="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2"/>  
  4. <entity level="3" data="3,3,2,2,2,3,3,3,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,2,2,2,3,3"/>  
  5. </level>  

我们需要做到的就是获取里面level和data的信息,好,看我们该如何解析!

首先来看看在Cocos2d-x中如何将xml文件读到内存中:

  1. const char* file_path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(fileName);  
  2. unsigned long size;  
  3. char *pFileContent =(char*)CCFileUtils::sharedFileUtils()->getFileData(file_path, "r", &size);  

上面的代码比较简单,不过需要注意的是,在加载文件的时候,最好还是使用文件的绝对路径,不然有时候会出现问题!继续:

  1. TiXmlElement* rootElement = myDocument->RootElement();//Root  
  2.  TiXmlElement* entity = rootElement->FirstChildElement();  


  1. TiXmlDocument* myDocument = new TiXmlDocument;  
  2. myDocument->Parse(pFileContent,0,TIXML_ENCODING_UTF8);  


这个就就是去解析XML了,它将XML解析成一个又一个的TiXmlElement. 继续

  1. TiXmlElement* rootElement = myDocument->RootElement();//Root  
  2.  TiXmlElement* entity = rootElement->FirstChildElement();  


这个就比交简单了,从字面上就能看出来了,先去获取根Element,然后获取根Element的第一个子Element.好了,重点来了

  1. while (entity) {  
  2.         TiXmlAttribute* indexAttribute = entity->FirstAttribute();//获取entity elment的第一个属性  
  3.         while (indexAttribute) {//成功获取到  
  4.             const char* attribute = indexAttribute->Name();//获取属性的名字  
  5.             if (strcmp(attribute, "level") == 0) {//如果属性名字为"Level"  
  6.             }else if (strcmp(attribute, "data") == 0){//如果属性的名字为"data"  
  7.             }  
  8.             indexAttribute = indexAttribute->Next();//移动到下一个属性  
  9.         }  
  10.         entity = entity->NextSiblingElement();//移动到下一个兄弟Element  
  11.     }  

哈哈,上面里面代码应该有注释了,感觉还算清楚的!

至此,使用TinyXML来在Cocos2d-x中解析XML文件就完整OK了!

转自:http://blog.csdn.net/jiujie_/article/details/9004640

抱歉!评论已关闭.