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

2.下载后,将

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

这6个文件

移动到 Classes里面

3.编写测试:

#include "ParseXMLLayer.h"
#include "tinyxml.h"ParseXMLLayer::~ParseXMLLayer(){
}
void ParseXMLLayer::onEnter(){CCLayer::onEnter();TiXmlDocument* myDocument = new TiXmlDocument(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("test.xml"));myDocument->LoadFile();TiXmlElement* rootElement = myDocument->RootElement();  // ClassTiXmlElement* studentsElement = rootElement->FirstChildElement();  // StudentsTiXmlElement* studentElement = studentsElement->FirstChildElement(); // studentwhile (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();}delete myDocument;}

test.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<Class name="计算机软件班"><Students><student name="张三" studentNo="13031001" sex="男" age="22"><phone>88208888</phone><address>西安市太白南路二号</address></student><student name="李四" 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文档,操作如下

<Persons><Person ID="1"><name>周星星</name><age>20</age></Person><Person ID="2"><name>白晶晶</name><age>18</age></Person>
</Persons>

1.创建一个XML的文档对象

    TiXmlDocument *myDocument = new TiXmlDocument("填上你的Xml文件名");//可以有(相对)路径myDocument->LoadFile();

2.获得根元素,即Persons

 TiXmlElement *RootElement = myDocument.RootElement();cout << RootElement->Value() << endl;    //输出根元素名称,即输出Persons。

3.获得第一个Person节点,就第一个子结点 ,若不TiXmlEelement的,用FirstChild()

TiXmlElement *FirstPerson = RootElement->FirstChildElement();

4.获得第一个Person的name节点和age节点和ID属性

 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()来指向它

  cout << NameElement->FirstChild()->Value() << endl;cout << AgeElement->FirstChild()->Value ()<< endl;cout << IDAttribute->Value() << endl;

7.创建一个XML的文档对象

TiXmlDocument *myDocument = new TiXmlDocument();

8.创建一个根元素并连接

TiXmlElement *RootElement = new TiXmlElement("Persons");myDocument->LinkEndChild(RootElement);

9.创建一个Person元素并连接

TiXmlElement *PersonElement = new TiXmlElement("Person");RootElement->LinkEndChild(PersonElement);

10.设置Person元素的属性

 PersonElement->SetAttribute("ID", "1");

11.创建name元素、age元素并连接

    TiXmlElement *NameElement = new TiXmlElement("name");TiXmlElement *AgeElement = new TiXmlElement("age");PersonElement->LinkEndChild(NameElement);PersonElement->LinkEndChild(AgeElement);

12.设置name元素和age元素的内容并连接

    TiXmlText *NameContent = new TiXmlText("周星星");TiXmlText *AgeContent = new TiXmlText("20");NameElement->LinkEndChild(NameContent);AgeElement->LinkEndChild(AgeContent);

13.保存到文件

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

Cocos2dx---------------- TinyXml 解析 XML相关推荐

  1. tinyxml 读取文本节点_c++中用TINYXML解析XML文件

    TinyXML介绍 最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方 ...

  2. C++ 使用 TinyXml 解析 XML 文件

    知乎  C++解析xml有什么好用的轮子? :https://www.zhihu.com/question/32046606 TinyXML-2 的 github地址和帮助文档:https://git ...

  3. TinyXML-2解析XML数据

    声明 本文例子源自在C++中使用TinyXML2解析xml一文,其余部分来源于网络搜集,难免疏漏,敬请随意吐槽. XML以及JSON 什么是XML 根据Wikipedia-XML的说法: 可扩展标记语 ...

  4. cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)

    今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...

  5. cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题

    本文由@呆代待殆原创,转载请注明出处. 正常情况下,我们在用tinyxml读取xml文件的的时候,会像下面这样写. 1 std::string filePath = FileUtils::getIns ...

  6. [转载]VC轻松解析XML文件 - CMarkup类的使用方法

    VC轻松解析XML文件 - CMarkup类的使用方法 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyXML很好,可能字符集问题,我编译不了 ...

  7. 《转》 在C++中使用TinyXML2解析xml

    读取和设置xml配置文件是最经常使用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,由于它的API接口和Java的十分类似.面向对象性非常好.       TinyX ...

  8. cocos2d-x之读取xml文件

    cocos2d-x之读取xml文件 在resource文件夹下,添加data.xml文件 新建->Other->empty->open 就新建一个xml文件了, data.xml内容 ...

  9. 【C++】TinyXML读取xml文件用法详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 XML文件理解 常用的XML类方法使用 总结 前言 TinyXML下载地址:https://sourceforge.n ...

  10. c语言tinyxml使用方法,如何利用tinyxml操纵xml及注意问题

    在上篇博客中,大概了解了tinyxml工具的架构,那这篇博客,我们详细讲述如何利用tinyxml操纵xml.以及在操作的过程中,我们应该注意的问题. 首先把tinyxml源文件导入自己的工程中,效果如 ...

最新文章

  1. 互联网Scratch编程趣味课:不插电编程和计算机对话[图]
  2. Docker Compose 配置文件详解
  3. Android自动填充短信验证码
  4. 2013\Province_C_C++_A\7.错误票据
  5. 脚本语言php是什么意思,php是什么脚本语言
  6. Python爬虫之pyppeteer去除Chrome正受到自动测试软件的控制(反爬策略)
  7. 数据积分-牛顿科茨法与高斯勒让德法对比及示例
  8. nodejs文件的读取
  9. 1682. [HAOI2014]贴海报
  10. 编程修养 from匠人的百宝箱
  11. BC26接入电信平台
  12. 一分钟读懂dB、dBm、dBw的区别
  13. 从空空狐谈信用卡套利
  14. 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
  15. js:nextSibling兄弟节点的使用
  16. 1413-数列求和 ZCMU
  17. moses 编译_MOSES安装以及使用说明
  18. Microsoft CSP简介
  19. ffmpeg 分辨率 压缩_视频怎么在尽量不损害画质的前提下压缩?
  20. html制作开心餐厅,二次元少女开心餐厅

热门文章

  1. 计算机网络(韩立刚网课笔记)
  2. android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...
  3. Selenium3元素定位详解与封装
  4. python收集参数_Python 中函数的 收集参数 机制
  5. center os php,Center OS 7 Apache安装配置
  6. 组合,聚合,关联,依赖的区别
  7. 第一章 了解BaseApplication框架以及使用Ogre Application Wizzard
  8. 利用深度卷积模型对巴拉科咖啡叶疾病进行分类
  9. 深度学习模型创建dataset
  10. 【matlab】结构体