cocos2dx XML配置文件读取详解

cocos2dx XML配置文件读取详解,第1张

概述1.下载TinyXml   www.sourceforge.net/projects/tinyxml 2.下载后,将 tinystr.cpp tinystr.h tinyxml.cpp tinyxml.h tinyxmlerror.cpp tinyxmlparser.cpp 这6个文件 移动到 Classes里面 3.编写测试:   [cpp] view plain copy #include "

1.下载TinyXml www.sourceforge.net/projects/tinyxml


2.下载后,将

tinystr.cpp
tinystr.h
tinyxml.cpp
tinyxml.h
tinyxmlerror.cpp
tinyxmlparser.cpp

这6个文件

移动到 Classes里面


3.编写测试:

[cpp] view plain copy #include"ParseXMLLayer.h" #include"tinyxml.h" ParseXMLLayer::~ParseXMLLayer(){ } voIDParseXMLLayer::onEnter(){ cclayer::onEnter(); tixmldocument*mydocument=newtixmldocument(CCfileUtils::sharedfileUtils()->fullPathFromrelativePath("test.xml")); mydocument->Loadfile(); tixmlElement*rootElement=mydocument->RootElement();//Class tixmlElement*studentsElement=rootElement->FirstChildElement();//Students tixmlElement*studentElement=studentsElement->FirstChildElement();//student while(studentElement){ tixmlAttribute*attributeOfStudent=studentElement->FirstAttribute();//获得student的name属性 while(attributeOfStudent){ cclOG("%s:%s",attributeOfStudent->name(),attributeOfStudent->Value()); //std::cout<<attributeOfStudent->name()<<":"<<attributeOfStudent->Value()<<std::endl; attributeOfStudent=attributeOfStudent->Next(); } tixmlElement*phoneElement=studentElement->FirstChildElement();//获得student的phone元素 cclOG("phone:%s",phoneElement->GetText()); //std::cout<<"phone"<<":"<<phoneElement->GetText()<<std::endl; tixmlElement*addressElement=phoneElement->NextSiblingElement(); cclOG("address:%s",addressElement->GetText()); //std::cout<<"address"<<":"<<phoneElement->GetText()<<std::endl; studentElement=studentElement->NextSiblingElement(); } deletemydocument; }
test.xml如下: [HTML] view plain copy <?xmlversion="1.0"enCoding="UTF-8"?> <Classname="计算机软件班"> <Students> <studentname="张三"studentNo="13031001"sex="男"age="22"> <phone>88208888</phone> <address>西安市太白南路二号</address> </student> <studentname="李四"studentNo="13031002"sex="男"age="20"> <phone>88206666</phone> <address>西安市光华路</address> </student> </Students> </Class>
关于TinyXML基本使用:

XML文档的结构:

TinyXml实现的时DOM访问模型,主要类间的关系如下图所示:

tixmlBase:其他类的基类,是个抽象类

tixmlNode:表示一个节点,包含一般方法,如访问自节点、兄弟节点、编辑自身、编辑子节点

tixmldocument:表示整个XML文档,不对应其中某个特定的节点。

tixmlElement:表示元素节点,可以包含子节点和tixmlAttribute

tixmlComment:表示注释

tixmlDeclaration:表示声明

tixmlText:表示文本节点

tixmlUnkNown:表示未知节点,通常是出错了

tixmlAttribute:表示一个元素的属性

对于一个如下结构的.XML文档, *** 作如下

[HTML] view plain copy <Persons> <PersonID="1"> <name>周星星</name> <age>20</age> </Person> <PersonID="2"> <name>白晶晶</name> <age>18</age> </Person> </Persons>
1.创建一个XML的文档对象 [cpp] view plain copy tixmldocument*mydocument=newtixmldocument("填上你的Xml文件名");//可以有(相对)路径 mydocument->Loadfile();
2.获得根元素,即Persons [cpp] view plain copy tixmlElement*RootElement=mydocument.RootElement(); cout<<RootElement->Value()<<endl;//输出根元素名称,即输出Persons。
3.获得第一个Person节点,就第一个子结点 ,若不tixmlEelement的,用FirstChild() [cpp] view plain copy tixmlElement*FirstPerson=RootElement->FirstChildElement();
4.获得第一个Person的name节点和age节点和ID属性 [cpp] view plain copy tixmlElement*nameElement=FirstPerson->FirstChildElement(); tixmlElement*AgeElement=nameElement->NextSiblingElement(); tixmlAttribute*IDAttribute=FirstPerson->FirstAttribute();
5.指向下一个同级的结点 用NextSiblingElement();

就是指向下一个兄弟节点


6.输出第一个Person的内容,即周星星;即20;ID属性1。这里的nameElement只是指向 <name>,nameElement->value()就是 name ,
而不是周星星,“周星星”是一个文本格式的结点,而要nameElement->FirstChild()来指向它

[cpp] view plain copy cout<<nameElement->FirstChild()->Value()<<endl; cout<<AgeElement->FirstChild()->Value()<<endl; cout<<IDAttribute->Value()<<endl;
7.创建一个XML的文档对象 [cpp] view plain copy tixmldocument*mydocument=newtixmldocument();
8.创建一个根元素并连接 [cpp] view plain copy tixmlElement*RootElement=newtixmlElement("Persons"); mydocument->linkEndChild(RootElement);
9.创建一个Person元素并连接 [cpp] view plain copy tixmlElement*PersonElement=newtixmlElement("Person"); RootElement->linkEndChild(PersonElement);
10.设置Person元素的属性 [cpp] view plain copy PersonElement->SetAttribute("ID","1");
11.创建name元素、age元素并连接 [cpp] view plain copy tixmlElement*nameElement=newtixmlElement("name"); tixmlElement*AgeElement=newtixmlElement("age"); PersonElement->linkEndChild(nameElement); PersonElement->linkEndChild(AgeElement);
12.设置name元素和age元素的内容并连接 [cpp] view plain copy tixmlText*nameContent=newtixmlText("周星星"); tixmlText*AgeContent=newtixmlText("20"); nameElement->linkEndChild(nameContent); AgeElement->linkEndChild(AgeContent);
13.保存到文件 [cpp] view plain copy mydocument->Savefile("要保存的xml文件名");
这样,便创建了一个如下的xml文件:
<Persons>
<Person ID="1">
<name>周星星</name>
<age>20</age>
</Person>
</Persons>


14.删除一个结点 voID ParentEelement->RemoveChild(指定的子结点)
删除所有的子结点voID ParentEelement->Clear()

15.返回第一个子结点
<结点类型> ParentEelement->FirstChild();//或是FirstChildElement();(确定子结点为tixmlElement类型用)

16.返回最后一个子结点
<结点类型> ParentEelement->LastChild();//或是LastChildElement();(确定子结点为tixmlElement类型用)

17.返回同级的后一个结点
<结点类型> Eelement->NextSibling();//或是NextSiblingElement();(确定后一结点为tixmlElement类型用)

18.返回同级的前一个结点
<结点类型> Eelement->PrevIoUsSibling();//或是PrevIoUsSiblingElement();(确定后一结点为tixmlElement类型用)

19.替换指定的子结点
ParentElement->ReplaceChild("要替换的子结点","新的结点");

20.返回结点的父结点
<结点类型> ChildElement -> Parent();

21属性类

属性为名称="值"对,元素可以具有属性值,但名称必须唯一。
你可以通过
+const std::string& nameTstr() const
返回属性名称

也可以通过下面三个函数返回属性值:
+const std::string& Valuestr() const
+int IntValue() const;
+double DoubleValue() const;

当然你也可以设置属性值,它们的函数声明如下:
+voID Setname( const std::string& _name )
+voID SetIntValue( int _value );
+voID SetDoubleValue( double _value );
+voID SetValue( const std::string& _value )

在元素属性中,通常具有许多属性,你可以通过Next函数返回下一个属性对象的指针,也可以通过PrevIoUs函数获得上一个属性对象的指针。它们的函数声明如下:
+tixmlAttribute* Next()
+tixmlAttribute* PrevIoUs()

以上就是TinyXML的一些常的 *** 作方法。


扩展:使用TinyXml库值得注意的问题

http://blog.csdn.net/hoyt00/article/details/6769883


-------------tinyxml在androID上解析assert文件夹下会有问题:解决方式如下:

[cpp] view plain copy constchar*filePath=CCfileUtils::sharedfileUtils()->fullPathFromrelativePath("levels/testbb.xml"); unsignedlongsize; char*pfileContent=(char*)CCfileUtils::sharedfileUtils()->getfileData(filePath,"r",&size); tixmldocument*mydocument=newtixmldocument; mydocument->Parse(pfileContent,tixML_ENCoding_UTF8);
这样就能获得 [cpp] view plain copy mydocument 总结

以上是内存溢出为你收集整理的cocos2dx XML配置文件读取详解全部内容,希望文章能够帮你解决cocos2dx XML配置文件读取详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1007289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存