cocos2d-x 之 XML

2024-09-04 10:18
文章标签 xml cocos2d

本文主要是介绍cocos2d-x 之 XML,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个 XML 文档实例

XML 使用简单的具有自我描述性的语法:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。

下一行描述文档的根元素(像在说:“本文档是一个便签”):

<note>

接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>

最后一行定义根元素的结尾:

</note>

从本例可以设想,该 XML 文档包含了 John 给 George 的一张便签。

XML 具有出色的自我描述性,你同意吗?

XML 文档形成一种树结构

XML 文档必须包含根元素。该元素是所有其他元素的父元素。

XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。

所有元素均可拥有子元素:

<root><child><subchild>.....</subchild></child>
</root>

父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。

所有元素均可拥有文本内容和属性(类似 HTML 中)。

实例

xml 树结构示例

上图表示下面的 XML 中的一本书:

<bookstore>
<book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> 
</book>
<book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> 
</book>
<book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> 
</book>
</bookstore>

例子中的根元素是 <bookstore>。文档中的所有 <book> 元素都被包含在 <bookstore> 中。

<book> 元素有 4 个子元素:<title>、< author>、<year>、<price>。

、、*****************************************************************************

cocos2d-x如何获得Resources目录路径?--

CCFileUtils::fullPathFromRelativePath("文件名")

可以使用TinyXML

 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在WindowsLinux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这课XML树。
    注:DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系(理解html语言的读者会很容易理解这种树状模型)。               
    如下是一个XML片段:
    <Persons>
        <Person ID="1">
            <name>周星星</name>
            <age>20</age>
        </Person>
        <Person ID="2">
            <name>白晶晶</name>
            <age>18</age>
        </Person>
    </Persons>
    在TinyXML中,根据XML的各种元素来定义了一些类:
        TiXmlBase:整个TinyXML模型的基类。
                TiXmlAttribute:对应于XML中的元素的属性。
                TiXmlNode:对应于DOM结构中的节点。
                        TiXmlComment:对应于XML中的注释。
                        TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
                        TiXmlDocument:对应于XML的整个文档。
                        TiXmlElement:对应于XML的元素。
                        TiXmlText:对应于XML的文字部分。
                        TiXmlUnknown:对应于XML的未知部分。 
        TiXmlHandler:定义了针对XML的一些操作。
    那我们如何使用这些类以及他们的方法来操纵我们的XML呢?请看下面。
    一、读取XML(假设我们的Xml文档中的内容与上面的Xml内容一样)
    //创建一个XML的文档对象
    TiXmlDocument *myDocument = new TiXmlDocument("填上你的Xml文件名");
    myDocument->LoadFile();
    //获得根元素,即Persons。
    TiXmlElement *RootElement = myDocument.RootElement();
    //输出根元素名称,即输出Persons。
    cout << RootElement->Value() << endl;
    //获得第一个Person节点。
    TiXmlElement *FirstPerson = RootElement->FirstChildElement();
    //获得第一个Person的name节点和age节点和ID属性。
    TiXmlElement *NameElement = FirstPerson->FirstChildElement();
    TiXmlElement *AgeElement = NameElement->NextSiblingElement();
    TiXmlAttribute *IDAttribute = FirstPerson->FirstAttribute();
    //输出第一个Person的name内容,即周星星;age内容,即20;ID属性,即1。
    cout << NameElement->FirstChild()->Value << endl;
    cout << AgeElement->FirstChild()->Value << endl;
    cout << IDAttribute->Value() << endl;

    
    看,读取XML是不是很简单阿,和Java的XML解析库非常的相似,就是名字改了一下而已。
    二、生成XML内容
    //创建一个XML的文档对象。
    TiXmlDocument *myDocument = new TiXmlDocument();
    //创建一个根元素并连接。
    TiXmlElement *RootElement = new TiXmlElement("Persons");
    myDocument->LinkEndChild(RootElement);
    //创建一个Person元素并连接。
    TiXmlElement *PersonElement = new TiXmlElement("Person");
    RootElement->LinkEndChild(PersonElement);
    //设置Person元素的属性。
    PersonElement->SetAttribute("ID", "1");
    //创建name元素、age元素并连接。
    TiXmlElement *NameElement = new TiXmlElement("name");
    TiXmlElement *AgeElement = new TiXmlElement("age");
    PersonElement->LinkEndChild(NameElement);
    PersonElement->LinkEndChild(AgeElement);
    //设置name元素和age元素的内容并连接。
    TiXmlText *NameContent = new TiXmlText("周星星");
    TiXmlText *AgeContent = new TiXmlText("20");
    NameElement->LinkEndChild(NameContent);
    AgeElement->LinkEndChild(AgeContent);
    //保存到文件
    myDocument->SaveFile("要保存的xml文件名");
    这样,便创建了一个如下的xml文件:
    <Persons>
        <Person ID="1">
            <name>周星星</name>
            <age>20</age>
        </Person>
    </Persons>



tinyxml使用笔记与总结

 

在TinyXML中,根据XML的各种元素来定义了一些类:
        TiXmlBase:整个TinyXML模型的基类。
        TiXmlAttribute:对应于XML中的元素的属性。
        TiXmlNode:对应于DOM结构中的节点。
        TiXmlComment:对应于XML中的注释。
        TiXmlDeclaration:对应于XML中的申明部分,即<?versiong="1.0" ?>。
        TiXmlDocument:对应于XML的整个文档。
        TiXmlElement:对应于XML的元素。
        TiXmlText:对应于XML的文字部分。
        TiXmlUnknown:对应于XML的未知部分。 
        TiXmlHandler:定义了针对XML的一些操作。

例如:

[转载]用cocos2d-x <wbr>解析xml <? xml version="1.0" standalone=no>
[转载]用cocos2d-x <wbr>解析xml<!– Our to do list data –>
[转载]用cocos2d-x <wbr>解析xml<ToDo>
[转载]用cocos2d-x <wbr>解析xml<Item priority="1"> Go to the <bold>Toy store!</bold></Item>
[转载]用cocos2d-x <wbr>解析xml<Item priority="2"> Do bills</Item>
[转载]用cocos2d-x <wbr>解析xml</ToDo> 



整个对象树: 

TiXmlDocument "demo.xml"
TiXmlDeclaration "version=’1.0′" "standalone=no"
TiXmlComment " Our to do list data"
TiXmlElement "ToDo"
TiXmlElement "Item" Attribtutes: priority = 1
TiXmlText "Go to the "
TiXmlElement "bold"
TiXmlText "Toy store!"
TiXmlElement "Item" Attributes: priority=2
TiXmlText "Do bills" 

tinyXML中,用FirstChild"名字"时,FirstChild函数的点与要找的点必父子

句柄

想要健壮地读取一个XML文档,检查方法调用后的返回值是否为null是很重要的。一种安全的检错实现可能会产生像这样的代码: 

 

[转载]用cocos2d-x <wbr>解析xml TiXmlElement *  root  =  document.FirstChildElement(  " Document "  );
[转载]用cocos2d-x <wbr>解析xml
if  root )
[转载]用cocos2d-x <wbr>解析xml
{
[转载]用cocos2d-x <wbr>解析xmlTiXmlElement
* element = root->FirstChildElement( "Element" );
[转载]用cocos2d-x <wbr>解析xml
if element )
[转载]用cocos2d-x <wbr>解析xml
{
[转载]用cocos2d-x <wbr>解析xmlTiXmlElement
* child = element->FirstChildElement( "Child" );
[转载]用cocos2d-x <wbr>解析xml
if child )
[转载]用cocos2d-x <wbr>解析xml
{
[转载]用cocos2d-x <wbr>解析xmlTiXmlElement
* child2 = child->NextSiblingElement( "Child" );
[转载]用cocos2d-x <wbr>解析xml
if child2 )
[转载]用cocos2d-x <wbr>解析xml
{
[转载]用cocos2d-x <wbr>解析xml
// Finally do something useful. 
[转载]用cocos2d-x <wbr>解析xml



用句柄的话就不会这么冗长了,使用TiXmlHandle类,前面的代码就会变成这样: 

[转载]用cocos2d-x <wbr>解析xml TiXmlHandle docHandle(  & document );
[转载]用cocos2d-x <wbr>解析xmlTiXmlElement
*  child2  =  docHandle.FirstChild(  " Document "  ).FirstChild(  " Element "  ).Child(  " Child " 1  ).ToElement();
[转载]用cocos2d-x <wbr>解析xml
if  child2 )
[转载]用cocos2d-x <wbr>解析xml
{
[转载]用cocos2d-x <wbr>解析xml
// do something useful 
[转载]用cocos2d-x <wbr>解析xml

一、读取XML,设置节点文本
如下XML片段:

[转载]用cocos2d-x <wbr>解析xml <? xml version="1.0" encoding="UTF-8" standalone="yes"  ?>
[转载]用cocos2d-x <wbr>解析xml
< ZXML >
[转载]用cocos2d-x <wbr>解析xml    
< ZAPP >
[转载]用cocos2d-x <wbr>解析xml         
< VBS_RUNTIME_PARAMS >
[转载]用cocos2d-x <wbr>解析xml               
< BROADCAST_VERSION  info ="版本" > 8 </ BROADCAST_VERSION >
[转载]用cocos2d-x <wbr>解析xml               
< Broadcast >
[转载]用cocos2d-x <wbr>解析xml                
< FileCount  info ="资源文件个数" > 69 </ FileCount >
[转载]用cocos2d-x <wbr>解析xml                
< SOURCE_1 >
[转载]用cocos2d-x <wbr>解析xml                    
< ID  info ="图片编号" > 1 </ ID >
[转载]用cocos2d-x <wbr>解析xml                    
< Version  info ="图片版本" > 1 </ Version >
[转载]用cocos2d-x <wbr>解析xml                    
< Path  info ="图片路径" > /mnt/share/1.bmp </ Path >
[转载]用cocos2d-x <wbr>解析xml                    
< FileMode  info ="文件处理模式" > 0 </ FileMode >
[转载]用cocos2d-x <wbr>解析xml                
</ SOURCE_1 >
[转载]用cocos2d-x <wbr>解析xml                
< SOURCE_2 >
[转载]用cocos2d-x <wbr>解析xml                    
< Path  info ="图片路径" > /mnt/share/2.bmp </ Path >
[转载]用cocos2d-x <wbr>解析xml                    
< ID  info ="图片编号" > 2 </ ID >
[转载]用cocos2d-x <wbr>解析xml                    
< Version  info ="图片版本" > 1 </ Version >
[转载]用cocos2d-x <wbr>解析xml                    
< FileMode  info ="文件处理模式" > 0 </ FileMode >
[转载]用cocos2d-x <wbr>解析xml                
</ SOURCE_2 >
[转载]用cocos2d-x <wbr>解析xml                [转载]用cocos2d-x <wbr>解析xml[转载]用cocos2d-x <wbr>解析xml.
[转载]用cocos2d-x <wbr>解析xml                
</ Broadcast >
[转载]用cocos2d-x <wbr>解析xml         
</ VBS_RUNTIME_PARAMS >
[转载]用cocos2d-x <wbr>解析xml    
</ ZAPP >
[转载]用cocos2d-x <wbr>解析xml
</ ZXML >


要设置BROADCAST_VERSION节点的值 8为其他值,可参考如下代码(将值加1):
用ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis )方法替换

[转载]用cocos2d-x <wbr>解析xml        TiXmlDocument doc("zapp.conf");
[转载]用cocos2d-x <wbr>解析xml    doc.LoadFile();
[转载]用cocos2d-x <wbr>解析xml    TiXmlHandle docHandle( 
& doc );
[转载]用cocos2d-x <wbr>解析xmlTiXmlElement
*  Broadcast_ver  =  docHandle.FirstChild( " ZXML " ).FirstChild( " ZAPP " ).FirstChild( " VBS_RUNTIME_PARAMS " ).FirstChildElement( " BROADCAST_VERSION " ).ToElement();
[转载]用cocos2d-x <wbr>解析xml    TiXmlNode 
*  oldnode  =   Broadcast_ver -> FirstChild();
[转载]用cocos2d-x <wbr>解析xml    
const   char   * ver  =  Broadcast_ver -> GetText();
[转载]用cocos2d-x <wbr>解析xml    
int  oldVer  =  atoi(ver);
[转载]用cocos2d-x <wbr>解析xml    CString newVer;
[转载]用cocos2d-x <wbr>解析xml    newVer.Format(
" %d " ,oldVer + 1 );
[转载]用cocos2d-x <wbr>解析xml    TiXmlText newText(newVer);
[转载]用cocos2d-x <wbr>解析xml    Broadcast_ver
-> ReplaceChild(oldnode,newText);
[转载]用cocos2d-x <wbr>解析xml    AfxMessageBox(Broadcast_ver
-> GetText()); // 输出值
[转载]用cocos2d-x <wbr>解析xml    
doc.SaveFile();

二,删除节点,属性值

RemoveChild( TiXmlNode* removeThis )方法删除父节点的子节点,
RemoveAttribute( const char * name )方法删除属性值.

例如删除BROADCAST_VERSION节点

[转载]用cocos2d-x <wbr>解析xml TiXmlHandle docHandle(  & doc );
[转载]用cocos2d-x <wbr>解析xml    TiXmlElement
*  Broadcast_ver  =  docHandle.FirstChild( " ZXML " ).FirstChild( " ZAPP " ).FirstChild( " VBS_RUNTIME_PARAMS " ).ToElement();
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    TiXmlNode 
*  node  =   Broadcast_ver -> FirstChild( " BROADCAST_VERSION " );
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    Broadcast_ver
-> RemoveChild(node);

也可以删除整个SOURCE_1节点:

[转载]用cocos2d-x <wbr>解析xml TiXmlHandle docHandle(  & doc );
[转载]用cocos2d-x <wbr>解析xml    TiXmlElement
*  Broadcast  =  docHandle.FirstChild( " ZXML " ).FirstChild( " ZAPP " ).FirstChild( " VBS_RUNTIME_PARAMS " ).FirstChild( " Broadcast " ).ToElement();
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    TiXmlNode 
*  node  =   Broadcast -> FirstChild( " SOURCE_1 " );
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    Broadcast
-> RemoveChild(node);

删除BROADCAST_VERSION的info属性:

[转载]用cocos2d-x <wbr>解析xml TiXmlHandle docHandle(  & doc );
[转载]用cocos2d-x <wbr>解析xml    TiXmlElement
*  Broadcast_ver  =  docHandle.FirstChild( " ZXML " ).FirstChild( " ZAPP " ).FirstChild( " VBS_RUNTIME_PARAMS " ).FirstChildElement( " BROADCAST_VERSION " ).ToElement();
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    Broadcast_ver
-> RemoveAttribute( " info " );  // 删除info

可以借助NextSiblingElement()方法实现递归删除.

三,添加节点,属性值

例如在SOURCE_3下添加BROADCAST_PID节点:

[转载]用cocos2d-x <wbr>解析xml TiXmlHandle docHandle(  & doc );
[转载]用cocos2d-x <wbr>解析xml    TiXmlElement
*  Broadcast  =  docHandle.FirstChild( " ZXML " ).FirstChild( " ZAPP " ).FirstChild( " VBS_RUNTIME_PARAMS " ).FirstChild( " Broadcast " ).ToElement();
[转载]用cocos2d-x <wbr>解析xml    TiXmlElement
*  Broadcast_Pid  =   new  TiXmlElement( " BROADCAST_PID " );
[转载]用cocos2d-x <wbr>解析xml    TiXmlText 
* text  = new  TiXmlText( " 7215 " );
[转载]用cocos2d-x <wbr>解析xml    Broadcast_Pid
-> SetAttribute( " info " , " the pid " );
[转载]用cocos2d-x <wbr>解析xml    Broadcast_Pid
-> LinkEndChild(text);
[转载]用cocos2d-x <wbr>解析xml    Broadcast
-> LinkEndChild(Broadcast_Pid);

将在SOURCE_3后添加新的节点:

[转载]用cocos2d-x <wbr>解析xml < BROADCAST_PID  info ="the pid" > 7215 </ BROADCAST_PID >

四,最后说一下中文乱码的问题

乱码是由于GB2312与UTF8之间转换不当造成的,tinyxml在处理UTF8本身没有问题,当你打开一个UTF8的文档,可以在加载的时候指定UTF8的方式,或者文档声明处指明的编码格式,tinyxml会按照相应的编码格式加载,但很多时候当我们输出或写入中文字段时会出现乱码,无论在内存,还是打印出来的内容.这是因为我们的软件通常是GB2312编码,而读取或写入的内容是UTF8,自然就会出错.可以借助网上的两个函数来实现转换(原作者不详):

[转载]用cocos2d-x <wbr>解析xml      void  ConvertUtf8ToGBK(CString &  strUtf8) 
[转载]用cocos2d-x <wbr>解析xml    
{
[转载]用cocos2d-x <wbr>解析xml        
int len=MultiByteToWideChar(CP_UTF8, 0(LPCTSTR)strUtf8, -1NULL,0);
[转载]用cocos2d-x <wbr>解析xml        unsigned 
short * wszGBK = new unsigned short[len+1];
[转载]用cocos2d-x <wbr>解析xml        memset(wszGBK, 
0len * 2 + 2);
[转载]用cocos2d-x <wbr>解析xml        MultiByteToWideChar(CP_UTF8, 
0(LPCTSTR)strUtf8, -1wszGBK, len);
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml        len 
= WideCharToMultiByte(CP_ACP, 0wszGBK, -1NULL, 0NULL, NULL);
[转载]用cocos2d-x <wbr>解析xml        
char *szGBK=new char[len + 1];
[转载]用cocos2d-x <wbr>解析xml        memset(szGBK, 
0len + 1);
[转载]用cocos2d-x <wbr>解析xml        WideCharToMultiByte (CP_ACP, 
0wszGBK, -1szGBK, len, NULL,NULL);
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml        strUtf8 
= szGBK;
[转载]用cocos2d-x <wbr>解析xml        delete[] szGBK;
[转载]用cocos2d-x <wbr>解析xml        delete[] wszGBK;
[转载]用cocos2d-x <wbr>解析xml    }

[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml    
void  ConvertGBKToUtf8(CString &  strGBK)
[转载]用cocos2d-x <wbr>解析xml    
{
[转载]用cocos2d-x <wbr>解析xml        
int len=MultiByteToWideChar(CP_ACP, 0(LPCTSTR)strGBK, -1NULL,0);
[转载]用cocos2d-x <wbr>解析xml        unsigned 
short * wszUtf8 = new unsigned short[len+1];
[转载]用cocos2d-x <wbr>解析xml        memset(wszUtf8, 
0len * 2 + 2);
[转载]用cocos2d-x <wbr>解析xml        MultiByteToWideChar(CP_ACP, 
0(LPCTSTR)strGBK, -1wszUtf8, len);
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml        len 
= WideCharToMultiByte(CP_UTF8, 0wszUtf8, -1NULL, 0NULL, NULL);
[转载]用cocos2d-x <wbr>解析xml        
char *szUtf8=new char[len + 1];
[转载]用cocos2d-x <wbr>解析xml        memset(szUtf8, 
0len + 1);
[转载]用cocos2d-x <wbr>解析xml        WideCharToMultiByte (CP_UTF8, 
0wszUtf8, -1szUtf8, len, NULL,NULL);
[转载]用cocos2d-x <wbr>解析xml
[转载]用cocos2d-x <wbr>解析xml        strGBK 
= szUtf8;
[转载]用cocos2d-x <wbr>解析xml        delete[] szUtf8;
[转载]用cocos2d-x <wbr>解析xml        delete[] wszUtf8;
[转载]用cocos2d-x <wbr>解析xml    }

当然,你也可以用MultiByteToWideChar,WideCharToMultiByte函数自己实现转换.以上是简单应用的几个举例,理解他们,相信你已经能写出满足自己需要的代码了.

我用的是2.1.4的cocos2d-x,里面自带有tinyxml2库。好像2.1.0以上都有了

导入头文件:
#include "support/tinyxml2/tinyxml2.h"  

一:创建xml并保存

复制代码
//要储存XML文件的路径std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "wociao.xml";//xml文档XMLDocument *pDoc = new XMLDocument();if (NULL==pDoc) {return ;}//xml声明XMLDeclaration *pDel = pDoc->NewDeclaration("xml version=\"1.0\" encoding=\"UTF-8\"");if (NULL==pDel) {return ;}pDoc->LinkEndChild(pDel);//节点plistXMLElement *plistElement = pDoc->NewElement("plist");plistElement->SetAttribute("version", "1.0");//给节点设置属性pDoc->LinkEndChild(plistElement);//节点dictXMLElement *dictElement = pDoc->NewElement("dict");plistElement->LinkEndChild(dictElement);//节点keyXMLElement *keyElement = pDoc->NewElement("key");keyElement->LinkEndChild(pDoc->NewText("keyText"));//给节点设置值dictElement->LinkEndChild(keyElement);//节点stringXMLElement *stringElement = pDoc->NewElement("string");stringElement->LinkEndChild(pDoc->NewText("stringText"));//给节点设置值dictElement->LinkEndChild(stringElement);//节点arrayXMLElement *arrayElemet = pDoc->NewElement("array");dictElement->LinkEndChild(arrayElemet);for (int i = 0; i<3; i++) {XMLElement *strEle = pDoc->NewElement("string");strEle->LinkEndChild(pDoc->NewText("icon"));arrayElemet->LinkEndChild(strEle);}pDoc->SaveFile(filePath.c_str());//保存文件 参数:路径
    pDoc->Print();//打印delete pDoc;
复制代码

打印的结果

复制代码
<?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 

复制代码
//xml文件路径std::string filePath = CCFileUtils::sharedFileUtils()->getWritablePath() + "wociao.xml";
//xmlDocXMLDocument *pDoc = new XMLDocument();pDoc->LoadFile(filePath.c_str());//得到跟节点XMLElement *rootEle = pDoc->RootElement();//打印节点的值CCLog("%s",rootEle->GetText());//节点的第一个属性const XMLAttribute *attribute = rootEle->FirstAttribute();//打印属性的名字和值CCLog("%s %s",attribute->Name(),attribute->Value());    //查找节点的属性值float value = 0.1f;rootEle->QueryFloatAttribute("version", &value);CCLog("%f",value);//设置节点属性值rootEle->SetAttribute("version", 1.4);//跟节点的第一个字节点 dictXMLElement *dictEle = rootEle->FirstChildElement();//dict下面的子节点 keyXMLElement *keyEle = dictEle->FirstChildElement();//打印key节点的值CCLog("%s,%s",keyEle->Name(),keyEle->GetText());//key节点的next节点 stringXMLElement *stringEle = keyEle->NextSiblingElement();CCLog("%s,%s",stringEle->Name(),stringEle->GetText());//string节点的子节点XMLElement *nulXmlEle = stringEle->FirstChildElement();if (NULL == nulXmlEle) {CCLog("string下面没有子点了");}//保存xmlpDoc->SaveFile(filePath.c_str());
复制代码


这篇关于cocos2d-x 之 XML的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135735

相关文章

SpringBoot中配置文件pom.xml的使用详解

《SpringBoot中配置文件pom.xml的使用详解》SpringBoot的pom.xml文件是Maven项目的核心配置文件,用于定义项目的依赖、插件、构建配置等信息,下面小编就来和大家详细介绍一... 目录1. 基本结构2. 关键部分详解2.1 <modelVersion>2.2 项目坐标2.3 <p

Java实现XML与JSON的互相转换详解

《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. XML转jsON1.1 代码目的1.2 代码实现2. JSON转XML3. JSON转XML并输出成指定的

Maven pom.xml文件中build,plugin标签的使用小结

《Mavenpom.xml文件中build,plugin标签的使用小结》本文主要介绍了Mavenpom.xml文件中build,plugin标签的使用小结,文中通过示例代码介绍的非常详细,对大家的学... 目录<build> 标签Plugins插件<build> 标签<build> 标签是 pom.XML

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Python xmltodict实现简化XML数据处理

《Pythonxmltodict实现简化XML数据处理》Python社区为提供了xmltodict库,它专为简化XML与Python数据结构的转换而设计,本文主要来为大家介绍一下如何使用xmltod... 目录一、引言二、XMLtodict介绍设计理念适用场景三、功能参数与属性1、parse函数2、unpa

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

intellij idea generatorConfig.xml

generatorConfig.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-ge

xml概论

以下内容摘录自W3School 一、XML的特性 xml是用来传输和存储数据的,本身对数据没有任何操作。在这里要区别一下html,html是用来显示数据的。xml的焦点是数据内容,html的焦点是数据外观。 下面是xml的定义: •XML 指可扩展标记语言(EXtensible Markup Language) •XML 是一种标记语言,很类似 HTML