Cocos2dx---------------- TinyXml 解析 XML
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相关推荐
- tinyxml 读取文本节点_c++中用TINYXML解析XML文件
TinyXML介绍 最近做一个负载均衡的小项目,需要解析xml配置文件,用到了TinyXML,感觉使用起来很容易,给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方 ...
- C++ 使用 TinyXml 解析 XML 文件
知乎 C++解析xml有什么好用的轮子? :https://www.zhihu.com/question/32046606 TinyXML-2 的 github地址和帮助文档:https://git ...
- TinyXML-2解析XML数据
声明 本文例子源自在C++中使用TinyXML2解析xml一文,其余部分来源于网络搜集,难免疏漏,敬请随意吐槽. XML以及JSON 什么是XML 根据Wikipedia-XML的说法: 可扩展标记语 ...
- cocos2d-x 3.0 使用Sax解析xml文档(解决中文显示问题)
今天是个好日子,心想的事儿都能成,明天是个好日子,打开了家门儿迎春风... 恩,听着歌写文档生活就是这么享受. 今天以前的邻居大神突然在qq上赞了我一下,这让我异常激动啊..这还要从前前前几天说起,那 ...
- cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题
本文由@呆代待殆原创,转载请注明出处. 正常情况下,我们在用tinyxml读取xml文件的的时候,会像下面这样写. 1 std::string filePath = FileUtils::getIns ...
- [转载]VC轻松解析XML文件 - CMarkup类的使用方法
VC轻松解析XML文件 - CMarkup类的使用方法 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等. 据说tinyXML很好,可能字符集问题,我编译不了 ...
- 《转》 在C++中使用TinyXML2解析xml
读取和设置xml配置文件是最经常使用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,由于它的API接口和Java的十分类似.面向对象性非常好. TinyX ...
- cocos2d-x之读取xml文件
cocos2d-x之读取xml文件 在resource文件夹下,添加data.xml文件 新建->Other->empty->open 就新建一个xml文件了, data.xml内容 ...
- 【C++】TinyXML读取xml文件用法详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 XML文件理解 常用的XML类方法使用 总结 前言 TinyXML下载地址:https://sourceforge.n ...
- c语言tinyxml使用方法,如何利用tinyxml操纵xml及注意问题
在上篇博客中,大概了解了tinyxml工具的架构,那这篇博客,我们详细讲述如何利用tinyxml操纵xml.以及在操作的过程中,我们应该注意的问题. 首先把tinyxml源文件导入自己的工程中,效果如 ...
最新文章
- 互联网Scratch编程趣味课:不插电编程和计算机对话[图]
- Docker Compose 配置文件详解
- Android自动填充短信验证码
- 2013\Province_C_C++_A\7.错误票据
- 脚本语言php是什么意思,php是什么脚本语言
- Python爬虫之pyppeteer去除Chrome正受到自动测试软件的控制(反爬策略)
- 数据积分-牛顿科茨法与高斯勒让德法对比及示例
- nodejs文件的读取
- 1682. [HAOI2014]贴海报
- 编程修养 from匠人的百宝箱
- BC26接入电信平台
- 一分钟读懂dB、dBm、dBw的区别
- 从空空狐谈信用卡套利
- 双显示器 启动黑屏 黑苹果_黑苹果开机加载黑屏
- js:nextSibling兄弟节点的使用
- 1413-数列求和 ZCMU
- moses 编译_MOSES安装以及使用说明
- Microsoft CSP简介
- ffmpeg 分辨率 压缩_视频怎么在尽量不损害画质的前提下压缩?
- html制作开心餐厅,二次元少女开心餐厅
热门文章
- 计算机网络(韩立刚网课笔记)
- android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...
- Selenium3元素定位详解与封装
- python收集参数_Python 中函数的 收集参数 机制
- center os php,Center OS 7 Apache安装配置
- 组合,聚合,关联,依赖的区别
- 第一章 了解BaseApplication框架以及使用Ogre Application Wizzard
- 利用深度卷积模型对巴拉科咖啡叶疾病进行分类
- 深度学习模型创建dataset
- 【matlab】结构体