archive.org · 2014. 8. 6. · Created Date: 8/5/2014 7:49:11 PM
2014/11/6
-
Upload
olivia-hyde -
Category
Documents
-
view
61 -
download
7
description
Transcript of 2014/11/6
![Page 1: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/1.jpg)
23/4/20 23/4/2023/4/20
XML 解析操作
Version1.0
2010年 5月
![Page 2: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/2.jpg)
23/4/20 2
Overview
课程介绍 XML 文件介绍 XML 文件的解析 利用 TinyXML 解析 XML 文档 参考资料
![Page 3: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/3.jpg)
23/4/20 3
课程介绍
课程目标 预备知识 目标听众 日程表 词汇表
![Page 4: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/4.jpg)
23/4/20 4
课程目标
理解 XML 文档结构 理解 XML 文档的解析流程 掌握第三方库 TinyXML 进行 XML 文件的解
析
![Page 5: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/5.jpg)
23/4/20 5
VC++ 设计基础 C/C++ 程序设计基础
预备知识
![Page 6: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/6.jpg)
23/4/20 6
项目经理 软件开发人员 其他人员
目标听众
![Page 7: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/7.jpg)
23/4/20 7
共计: 0.5 天 详细安排
<0:05> 课程介绍 <0:25> VC++6.0 的安装<0:35> VC++6.0 的工具熟悉<0:10> Window 标准控件介绍<0:05> 问题& 反馈
Total: <1:10> hours
日程表
![Page 8: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/8.jpg)
23/4/20 8
XML- 可扩展标记语言( eXtensible Markup Language )
DOM- 文档对象模型 XSL- 可扩展样式表语言 (EXtensible Stylesheet
Language) 。 Xpath-XML 路径语言( XML Path Language ) DTD- 文档类型描述( Document Type
Definition ) SGML- 标准通用标记语言
词汇表
![Page 9: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/9.jpg)
23/4/20 9
Overview
课程介绍 XML 文件介绍 XML 文件的解析 利用 TinyXML 解析 XML 文档 参考资料
![Page 10: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/10.jpg)
23/4/20 10
XML 发展历史 XML 从 1995 年开始形成, 1998 年二月发布 XML1.0 标准。 XML
的前身是 SGML ( the Standard Generalized Markup Language) 是 IBM 从 1960 年开始发展的 GML 标准化后的名称。
GML 概念: 1. 档案中能够明确的将标示和内容分开 2. 所有档案的标记使用方法均一致 1978 年 ANSI 将 GML 加以整理规范,发布成为 SGML , 1986 年
起为 ISO 采用,并被运用到各种大型的档案计划中,但是 SGML 是一种非常严格的档案描述法,难以理解和学习,进而影响推广应用。
XML 文件介绍
![Page 11: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/11.jpg)
23/4/20 11
同时 W3C 也发现 HTML 的问题: 1. 不能解决所有解释资料的问题 - 影音或化学公式,音乐符号
2. 效能问题 - 需要下载整份档案,才能开始对档案做搜寻 3. 扩充性,弹性,易读性均不佳。 为了解决以上问题,专家们使用 SGML 精简制作,并依照
HTML 的发展经验,产生出一套使用上规则的严谨,但是简单的描述资料语言: XML 。
XML 文件介绍
![Page 12: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/12.jpg)
23/4/20 12
XML 用途 XML 被广泛用来作为跨平台之间互动数据的形式,主要针对数
据的内容,通过不同的格式化描述手段 XSLT , CSS 等可以完成最终的形势表单(生成对应的 HTML , PDF 或者其他的档案格式)
XML 设计用来传输及携带资料资讯,不用来表现或展示资料, HTML 语言则用来表现资料,所以 XML 用途的焦点是它说明资料是什么,以及携带资料资讯。
XML 文件介绍
![Page 13: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/13.jpg)
23/4/20 13
XML 应用 XML 应用面主要分为两种类型,文档型和数据型: 1. 自定义 XML+XSLT=>HTML XML 存放整个文档的 XML 数据,然后 XSLT 将 XML 转换,
解析,结合 XSLT 的 HTML 标签,最终成为 HTML ,显示在浏览器上。
2.XML 作为微型数据库,这是最常见的数据型应用。 利用相关 XMLAPI ( MSXML DOM , JAVA DOM 等)对
XML 进行存取和查询,留言板的实现中,就经常可以看到用XML 作为数据库。完全以 XML相关技术为基础的数据库系统如: eXist 。
3. 作为信息传递的载体,典型的就是 WEB SERVICE 将数
XML 文件介绍
![Page 14: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/14.jpg)
23/4/20 14
将数据包装成 XML 来传递,但这里的 XML已经有了特定的规格,既 SOAP (简单对象访问协议)
4. 应用程序的配置信息数据。 如 J2EE配置WEB服务器的 WEB.xml 5. 其他一些文档的 XML 格式。 6.保存数据间的映射关系。 如 Hibernate 。 这几种常见应用中,可以根据应用广泛程度,分为:自定义
XML 和特定意义 XML 。 1 和 2 属于自定义 XML 的范畴, 3 到6 则属于特定意义 XML 。或者说是 XML 的延伸。
XML 文件介绍
![Page 15: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/15.jpg)
23/4/20 15
XML 展现形式 <?xml version="1.0" encoding="UTF-8"?> <Persons> <Person ID="1"> <name> 周 1</name> <age>20</age> </Person> </Persons> 第一行是 XML声明,它定义 XML 的版本( 1.0 )和所使用的编码
( UTF-8). 第二行描述文档的根元素。 第三,四,五元素文档的元素。
XML 文件介绍
![Page 16: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/16.jpg)
23/4/20 16
XML 结构 XML 文档形成了一个树结构,它“从根部”开始,然后扩展到枝叶。并且 XML 文档必须有一个根元素,该元素是其他元素的父元素。
XML 文件介绍
<Persons><Persons>根根
<Person><Person> 元素元素 ID ID 属性属性
<Name><Name>元元素素
<age><age>元素元素
文本:周文本:周 11 文本:文本: 2020
![Page 17: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/17.jpg)
23/4/20 17
XML 语法规则 1. 所有 XML元素都必须有关闭标签。 <name> 周明 </name> 在 XML声明没有关闭标签,这不是错误,声明不属于 XML本身的组成部分,它不是 XML元素,也不需要关闭标签。
2.XML 标签对大小写敏感。 <Message> 这是错误的 </message> 3.XML必须正确地嵌套。 <outb><inner>Thies text is bold</inner></outb> 正确嵌套的意思是:由于<inner>元素是在<outb>元素
内打开,那么它必须在<outb>元素内关闭。
XML 文件介绍
![Page 18: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/18.jpg)
23/4/20 18
4.XML 文档必须有根元素。 XML 文档必须有一个元素是所有其他元素的父元素,该元素称为根元素。
5.XML 的属性值必须加引号。 <Person ID=1>……</Person> 6.实体引用 在 XML 中,一些字符拥有特殊意义。如果直接把字符放入文档,
则会出错。为了避免这个错误,采用实体引用。 如: << > > & & ' ‘ " “; 7.XML 中的注释 。 <!– this Is a comment --> 8. 在 XML 中,空格会被保留。
XML 文件介绍
![Page 19: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/19.jpg)
23/4/20 19
XML元素 XML元素指的是从开始标签(包括)直到结束标签(包括)的部
分。 XML元素可包含其他元素,文本或者两者的混合物,并且元素也
可以拥有属性。 <Persons>,<Person>都拥有其他元素, <name>只有文本内容。 <Person>拥有元素。
XML 文件介绍
<Persons> <Person ID="1"> <name> 周 1</name> <age>20</age> </Person> </Persons>
![Page 20: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/20.jpg)
23/4/20 20
XML元素命名规则 XML元素必须遵循以下命名规则: 1. 名称可以包含字母,数字以及其他的字符。 2. 名称不能以数字或者标点符合开始 3. 名称不能以字符 XML 开始 4. 名称不能包含空格 5. 可以使用任何名称,没有保留的字词。
XML 文件介绍
![Page 21: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/21.jpg)
23/4/20 21
XML属性 属性提供了有关元素的额外信息,通常提供不属于数据组成部
分的信息。 XML属性必须被引号包围,不过单引号和双引号均可
用。 <person sex=“man”> ,<person sex=‘man’> ---如果属性值本身包含双引号,那么有必要使用单引号包围它。如:
<gangster name='George "Shotgun" Ziegler'>
XML 文件介绍
![Page 22: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/22.jpg)
23/4/20 22
XML属性( VS 元素) 没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,您应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。
XML 文件介绍
![Page 23: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/23.jpg)
23/4/20 23
避免 XML属性 使用属性而引起的一些问题: 1. 属性无法包含多重的值(元素可以) 2. 属性无法描述树结构(元素可以) 3. 属性不易扩展(为未来的变化( 4. 属性难以阅读和维护 <note day="08" month="08" year="2008" to="George"
from="John" heading="Reminder" body="Don't forget the meeting!"> </note>
XML 文件介绍
![Page 24: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/24.jpg)
23/4/20 24
XML 验证 拥有正确语法的 XML 被称为“形式良好”的 XML 。 通过某个 DTD 进行了验证的 XML 是“合法”的 XML 一个 "形式良好 "的 XML 文档会遵守前几章介绍过的 XML
语法规则: 1.XML 文档必须有根元素 2.XML 文档必须有关闭标签 3.XML 标签对大小写敏感 4.XML 元素必须被正确的嵌套 5.XML 属性必须加引号
XML 文件介绍
![Page 25: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/25.jpg)
23/4/20 25
XML 验证 一个合法的 XML 文档是 "形式良好 "的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE note SYSTEM "Note.dtd"> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构
<!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
XML 文件介绍
![Page 26: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/26.jpg)
23/4/20 26
Overview
课程介绍 XML 文件介绍 XML 文件的解析 利用 TinyXML 解析 XML 文档 参考资料
![Page 27: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/27.jpg)
23/4/20 27
XML 解析模型 SAX 是基于事件的,其基本工作流程是分析 XML 文档,当发
现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。
DOM (文档对象模型),则是在分析时,一次性的将整个XML 文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于 SAX ,但可以给用户提供一个面向对象的访问接口,对用户更为友好。
同时提供了 SAX 和 DOM接口的库,是在底层先实现 SAX ,再在 SAX 的基础上实现 DOM
XML 文件介绍
![Page 28: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/28.jpg)
23/4/20 28
Overview
课程介绍 XML 文件介绍 XML 文件的解析 利用 TinyXML 解析 XML 文档 参考资料
![Page 29: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/29.jpg)
23/4/20 29
TinyXML 介绍 TinyXML 是目前非常流行的一款基于 DOM 模型的 XML 解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。
TinyXML
![Page 30: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/30.jpg)
23/4/20 30
TinyXML 类结构 TiXmlBase :其他类的基类,是个抽象类 TiXmlNode :表示一个节点,包含节点的一般方法,如访问自节点、兄弟节点、编辑自身、编辑子节电TiXmlDocument :表示整个 XML 文档,不对应其中某个特定的节点。
TiXmlElement :表示元素节点,可以包含子节点和 TiXmlComment :表示注释 TiXmlDeclaration :表示声明 TiXmlText :表示文本节点 TiXmlUnknown :表示未知节点,通常是出错了 TiXmlAttribute :表示一个元素的属性
TinyXML
![Page 31: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/31.jpg)
23/4/20 31
TinyXML 类结构关系图
TinyXML
![Page 32: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/32.jpg)
23/4/20 32
TiXmlBase 是所有类的基类, TiXmlNode 、 TiXmlAttribute 两个类都继承来自 TiXmlBase 类,其中 TiXmlNode 类指的是所有被 <...>...<.../>包括的内容,而 xml 中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在 TiXmlNode 的基础上又衍生出这几个类TiXmlComment 、 TiXmlDeclaration 、 TiXmlDocument 、 TiXmlElement 、 TiXmlText 、 TiXmlUnknown ,分别用来指明具体是 xml 中的哪一部分。 TiXmlAttribute 类不同于 TiXmlNode ,它指的是在尖括号里面的内容,像< ***=“ ”> ,其中 ***就是一个属性 , 引号里面的就是属性值。
TinyXML
![Page 33: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/33.jpg)
23/4/20 33
1. 各个节点类都从 TiXmlNode继承,在使用时常常需要将TiXmlNode* 类型的指针转换为其派生类的指针,在进行这种转换时,应该首先使用由 TiXmlNode 类提供的一系列转换函数,如 ToElement(void) ,而不是 c++ 的 dynamic_cast 。
2.由于 TinyXml 是一个非校验的解析器,因此当解析一个文件时,很可能文件并不包含我们预期的某个节点,在这种情况下,TinyXml 将返回空指针。因此,必须要对返回值进行检查,否则将很容易出现内存访问的错误。
TinyXML
![Page 34: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/34.jpg)
23/4/20 34
TiXmlDocument 1.创建一个空的文档对象,然后载入一个 xml 文档 TiXmlDocument doc();
doc.LoadFile("tutorial.xml");
2. 文档类提供了 Print()函数用于在控制台输出当前的文档内容 doc.Print(); // 输出文档 3. 可以使用 SaveFile()函数来进行另存为。 doc.SaveFile(“tutorial.txt”);
4. 文档对象还提供了一个实用的函数用于返回第一个根对象。 TiXmlElement* RootElement()
TinyXML
![Page 35: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/35.jpg)
23/4/20 35
TiXmlDeclaration 在标准的 XML 文件中,声明为文件的第一项 // 使用 TinyXml 的声明对象
TiXmlDeclaration *decl;decl = doc.FirstChild()->ToDeclaration(); 然后就可以使用它的功能了,它可以让你返回当前的版本,编码等信息,函数原形如下:const char *Version() constconst char *Encoding() constconst char *Standalone() const
TinyXML
![Page 36: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/36.jpg)
23/4/20 36
TiXmlElement 元素为一个容器类,它具有元素名称,并可以包含其它元素,文本,注释和未知节点,这些对象统称为元素的节点,即节点可以为元素、文本、注释和未知节点类型。元素也可以包含任意个数的属性。 1.节点名:
你可以通过如下的函数来设置和返回它。 const std::string& ValueStr() const void SetValue( const std::string& _value ) 2.父节点:
通过 Parent()函数来返回指向父节点对象的指针, Parent()函数的声明如下: TiXmlNode* Parent()
TinyXML
![Page 37: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/37.jpg)
23/4/20 37
3.子节点 通过父节点的指针,可以遍历所有的子节点: TiXmlNode* FirstChild();
TiXmlNode* FirstChild( const std::string& _value ); 以上两个函数用于返回第一个子节点对象的指针,带参数名的那个函数表示返回第一个名为 _value 的子节点。
TiXmlNode* LastChild(); TiXmlNode* LastChild( const std:: string& _value)
以上两个函数用于返回最后一个节点对象的指针,带参数名的那个函数表示返回最后一个名为 _value 的子节点。 你也可以使用 IterateChildren()函数来依次遍历所有的节点
TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous )
TinyXML
![Page 38: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/38.jpg)
23/4/20 38
4.插入子节点 TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode&
addThis ) TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis,
const TiXmlNode& addThis ) TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode*
beforeThis, const TiXmlNode& addThis ) 上面三个函数用于插入节点, InsertEndChild函数让你把新节点插入到末尾, InsertBeforeChild 和 InsertAfterChild函数允许你在指定的节点位置前后插入节点
ReplaceChild函数用于替换指定的节点: TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis,
const TiXmlNode& withThis )
TinyXML
![Page 39: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/39.jpg)
23/4/20 39
RemoveChild函数让你删除指定的节点 bool RemoveChild( TiXmlNode* removeThis ); Clear函数会删除本节点的所有子节点(包括子节点包含的从子节点),但不会修改本节点。 void Clear();
TinyXML
![Page 40: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/40.jpg)
23/4/20 40
5. 同级节点操作 根据当前的节点,返回上一个节点的指针 TiXmlNode* PreviousSibling(); const TiXmlNode* PreviousSibling( const std::string&
_value ) const 根据当前的节点,返回下一个节点的指针 TiXmlNode* NextSibling()
TiXmlNode* NextSibling( const std::string& _value) 函数 NextSiblingElement 用于返回下一个同级元素 TiXmlElement* NextSiblingElement()
TiXmlElement* NextSiblingElement( const std::string& _value)
TinyXML
![Page 41: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/41.jpg)
23/4/20 41
返回第一个子元素 : TiXmlElement* FirstChildElement()
TiXmlElement* FirstChildElement( const std::string&_value )
TinyXML
![Page 42: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/42.jpg)
23/4/20 42
元素属性 属性一般保存在元素中,它们为使用“=” 号连接的两个字符串,左边
的表示属性名,等号右边的表示属性值,通常使用字符串、整数和浮点数等数据类型表示
1.获取属性: const std::string* Attribute( const std::string&name ) ;
const std::string* Attribute( const std::string& name, int* i );const std::string* Attribute( const std::string&name, double* d );在上面 3 个函数中,第一个函数使用字符串保存返回的属性值,第二个函数把属性值转换为整数然后返回,第三个函数把属性值转换为浮点数然后返回。不过,第二、三个函数都会以字符串的形式记录属性值,并作为函数的返回值返回。
TinyXML
![Page 43: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/43.jpg)
23/4/20 43
2. 设置属性: void SetAttribute( const std::string&name, const std::string&_value );
void SetAttribute( const std::string&name, int _value );void SetDoubleAttribute( const char * name, double value );
3. 查找属性: FirstAttribute 和 LastAttribute 可以让你返回第一个和最后一个属
性,它们的函数声明如下:TiXmlAttribute* FirstAttribute()TiXmlAttribute* LastAttribute()
4.删除属性删除指定名称的属性,它的函数声明如下:void RemoveAttribute( const std::string&name )
TinyXML
![Page 44: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/44.jpg)
23/4/20 44
元素函数总结 ValueStr //返回元素名称
SetValue // 设置元素名称Parent //返回父节点对象
FirstChild //返回第一个子节点LastChild //返回最后一个子节点IterateChildren //返回下一个子节点
InsertEndChild //在最后一个子节点后插入子节点InsertBeforeChild //在指定的子节点前插入子节点InsertAfterChild //在指定的子节点后插入子节点ReplaceChild //替换指定的子节点RemoveChild //删除指定的子节点Clear //删除所有的子节点
TinyXML
![Page 45: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/45.jpg)
23/4/20 45
元素函数总结 PreviousSibling //返回同级中前一个节点
NextSibling //返回同级中后一个节点 NextSiblingElement //返回同级中后一个元素
FirstChildElement //返回第一个子元素节点Attribute //返回元素中的属性值QueryValueAttribute //返回元素中的属性值SetAttribute // 设置元素中的属性值FirstAttribute //返回元素中第一个属性对象LastAttribute //返回元素中最后一个属性对象RemoveAttribute //删除元素中指定的属性对象
TinyXML
![Page 46: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/46.jpg)
23/4/20 46
使用 TinyXML 1.首先下载 TinyXML 库的文件。
2. 下载后解压这个压缩包 ,解压到一个目录。 3. 在 TinyXML 的目录里面找到
tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp六个文件加入到自己的项目中。
4.如果要在工程中使用 STL ,打开 tinyxml.h,在第一行加入下面这行 :#defineTIXML_USE_STL // 标志使用 STL 的内容
5.在要使用 TinyXML 的文件里面包含#include “tinyxml.h” 。
TinyXML
![Page 47: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/47.jpg)
23/4/20 47
使用 TinyXML例子 1. 用程序建立文档对象 :
TinyXML
{
TiXmlDocument doc; TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" ); doc.LinkEndChild( decl ); TiXmlElement * element = new TiXmlElement( "Hello" ); doc.LinkEndChild( element ); TiXmlText * text = new TiXmlText( "World" ); element->LinkEndChild( text ); doc.SaveFile( "madeByHand2.xml" );}}
![Page 48: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/48.jpg)
23/4/20 48
2. 用程序读取 XML 文档 :
TinyXML
TiXmlDocument * myDocument=new TiXmlDocument("demo.xml");bool bReult; bReult=myDocument->LoadFile(); if (bReult) { TiXmlElement *RootElement=myDocument->RootElement();//根节点 TiXmlElement *FirstPerson=RootElement->FirstChildElement();//Person TiXmlElement *NameElement; TiXmlElement *AgeElement; while(FirstPerson) { NameElement=FirstPerson->FirstChildElement();//获取 Person元素的 Name属性 AgeElement=NameElement->NextSiblingElement();//获取 Person元素的 Age属性 FirstPerson=FirstPerson->NextSiblingElement(); }}
![Page 49: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/49.jpg)
23/4/20 49
Overview
课程介绍 XML 文件介绍 XML 文件的解析 利用 TinyXML 解析 XML 文档 参考资料
![Page 50: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/50.jpg)
23/4/20 50
[1] 《 XML 入门指南》 [2] 《 TinyXML Tutorial 中文指南》。
TinyXML
![Page 51: 2014/11/6](https://reader036.fdocument.pub/reader036/viewer/2022062408/5681332c550346895d9a24f7/html5/thumbnails/51.jpg)
23/4/20 51
Question?
THANK YOU