tinyxml介绍

上传人:子 文档编号:43004359 上传时间:2018-06-04 格式:DOC 页数:6 大小:16.10KB
返回 下载 相关 举报
tinyxml介绍_第1页
第1页 / 共6页
tinyxml介绍_第2页
第2页 / 共6页
tinyxml介绍_第3页
第3页 / 共6页
tinyxml介绍_第4页
第4页 / 共6页
tinyxml介绍_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《tinyxml介绍》由会员分享,可在线阅读,更多相关《tinyxml介绍(6页珍藏版)》请在金锄头文库上搜索。

1、TinyxmlTinyxml 介绍介绍TinyXml 是一个基于 DOM 模型的、非验证的轻量级 C+解释器一. XML 解析模型:目前 XML 的解析主要有两大模型:SAX 和 DOM。SAX 是基于事件的,其基本工作流程是分析 XML 文档,当发现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。DOM(文档对象模型) ,则是在分析时,一次性的将整个 XML 文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于 SAX,但可以给用户提供一个面向对象的访

2、问接口,对用户更为友好。另据说,一些同时提供了 SAX 和 DOM 接口的库,是在底层先实现SAX,再在 SAX 的基础上实现 DOM对于一个特定的 XML 文档而言,其正确性分为两个层次。首先是其格式应该符合 XML 的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的 XML 文件,称作 well-formatted。其次,一个 XML 文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的 DTD 文件或者 Schema 文件来定义,符合了这些定义要求的 XML 文件,称作 valid。因此,解析器也分为两种,一种是验证的,即会

3、跟据 XML 文件中的声明,用相应的 DTD 文件对 XML 文件进行校验,检查它是否满足DTD 文件的要求。另一种是忽略 DTD 文件,只要基本格式正确,就可以进行解析。就我所知,验证的解析器通常都是比较重量级的。TinyXml 不支持验证,但是体积很小,用在解析格式较为简单的 XML 文件,比如配置文件时,特别的合适。二. TinyXml 介绍:Tiny Xml Online DocumentationTinyXml Class HierarchyThis inheritance list is sorted roughly, but not completely, alphabetica

4、lly:TiXmlBaseTiXmlAttributeTiXmlNodeTiXmlCommentTiXmlDeclarationTiXmlDocumentTiXmlElementTiXmlTextTiXmlUnknownTiXmlHandleTiXmlVisitorTiXmlPrinterTinyXml 实现的时 DOM 访问模型,因此提供了一系列的类对应 XML文件中的各个节点。主要类间的关系如下图所示:TiXmlBase:其他类的基类,是个抽象类TiXmlNode:表示一个节点,包含节点的一般方法,如访问自节点、兄弟节点、编辑自身、编辑子节电TiXmlDocument:表示整个 XML 文

5、档,不对应其中某个特定的节点。TiXmlElement:表示元素节点,可以包含子节点和 TiXmlAttributeTiXmlComment:表示注释TiXmlDeclaration:表示声明TiXmlText:表示文本节点TiXmlUnknown:表示未知节点,通常是出错了TiXmlAttribute:表示一个元素的属性各类之间的转换由于各个节点类都从 TiXmlNode 继承,在使用时常常需要将TiXmlNode*类型的指针转换为其派生类的指针,在进行这种转换时,应该首先使用由TiXmlNode 类提供的一系列转换函数,如 ToElement(void),而不是c+的 dynamic_ca

6、st检查返回值由于 TinyXml 是一个非校验的解析器,因此当解析一个文件时,很可能文件并不包含我们预期的某个节点,在这种情况下,TinyXml将返回空指针。因此,必须要对返回值进行检查,否则将很容易出现内存访问的错误。如何重头建立一个 XML 文件先建立一个 TiXmlDocument 对象,然后,载入某个模板,或者直接插入一个节点作为根节点,接着就可以像打开一个已有的 XML 文件那样对它进行操作了。三. TinyXml 实践:Linux: Makefile setting# DEBUG can be set to YES to include debugging info, or NO

7、 otherwiseDEBUG := YES# PROFILE can be set to YES to include profiling info, or NO otherwisePROFILE := NO# TINYXML_USE_STL can be used to turn on STL support. NO, then STL# will not be used. YES will include the STL files.TINYXML_USE_STL := YESTinyXml 在构建时可以选择是否支持 STL,选择的话,则可以使用std:string,所以通常应该打开这个

8、选项。在 Windows 上,TinyXml 的源码包里提供了 VC6 的工程文件,直接用它就可以生成两个静态库(带 STL 和不带 STL) ,非常容易。唯一需要注意的是,默认生成的库是单线程的,如果用在多线程的项目中,需要改动一下配置,生成相应的多线程库。构建了相应的库之后,在使用了它们的工程中,只要在连接时把他们连上就行了。需要注意的是,如果需要 STL 支持,在编译用到了TinyXml 的文件时,需要定义一个宏 TIXML_USE_STL,对 gcc,可以使用参数-DTIXML_USE_STL,对 cl.exe(VC) ,可以使用参数/DTIXML_USE_STL,如果嫌麻烦,可以直接

9、定义在 tinyxml.h 文件里。附件: pro四. 例程:引自: http:/ “tinyxml.h“#include “tinystr.h“#include#include#includeusing namespace std;CString GetAppPath()/获取应用程序根目录TCHAR modulePathMAX_PATH;GetModuleFileName(NULL, modulePath, MAX_PATH);CString strModulePath(modulePath);strModulePath = strModulePath.Left(strModulePath

10、.ReverseFind(_T();return strModulePath;bool CreateXmlFile(string/创建一个根元素并连接。TiXmlElement *RootElement = new TiXmlElement(“Persons“);myDocument-LinkEndChild(RootElement);/创建一个 Person 元素并连接。TiXmlElement *PersonElement = new TiXmlElement(“Person“);RootElement-LinkEndChild(PersonElement);/设置 Person 元素的属

11、性。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

12、TiXmlText(“周星星“);TiXmlText *AgeContent = new TiXmlText(“22“);NameElement-LinkEndChild(NameContent);AgeElement-LinkEndChild(AgeContent);CString appPath = GetAppPath();string seperator = “;string fullPath = appPath.GetBuffer(0) +seperator+szFileName;myDocument-SaveFile(fullPath.c_str();/保存到文件catch (st

13、ringreturn true;bool ReadXmlFile(stringstring seperator = “;string fullPath = appPath.GetBuffer(0) +seperator+szFileName;/创建一个 XML 的文档对象。TiXmlDocument *myDocument = new TiXmlDocument(fullPath.c_str();myDocument-LoadFile();/获得根元素,即 Persons。TiXmlElement *RootElement = myDocument-RootElement();/输出根元素名称

14、,即输出 Persons。cout Value() FirstChildElement();/获得第一个 Person 的 name 节点和 age 节点和 ID 属性。TiXmlElement *NameElement = FirstPerson-FirstChildElement();TiXmlElement *AgeElement = NameElement-NextSiblingElement();TiXmlAttribute *IDAttribute = FirstPerson-FirstAttribute();/输出第一个 Person 的 name 内容,即周星星;age 内容,即;ID 属性,即。cout FirstChild()-Value() FirstChild()-Value() Value()

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号