DOM(Document Object Model,文档对象模型),则是在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。
解析器分为两种:一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。
一般而言,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件、简单的数据文件,特别的合适,可以很方便的静态连接到程序里。但是由于它是非验证的,因此需要在程序里做许多检查工做,加重了程序编写的负担。
下面介绍TinyXML的一些类。在TinyXML中,根据XML的各种元素来定义了一些类:
-
TiXmlBase: 所有tinyxml中的对象的公共基类,实现了一些公共的操作,比如字符编码转换等,另外还定义了一些公共的数据结构,比如错误类型等。
-
TiXmlNode: 是DOM树中结点元素的基类型,它定义了DOM树结点的一些特征数据以及一些相关的操作。
-
TiXmlDocument:对应于XML文档整体的一个对象,一棵DOM的根结点是TiXmlDocument类型,而且基它结点不能为TiXmlDocument类型。(example.xml)
-
TiXmlDeclaration:对应于XML文档开始部分声明部分的对象,它主要包含version, encode, standalone三个方面的数据信息以及相关的操作。(<?xml version=”1.0″ standalone=no>)
-
TiXmlComment: 对应于XML文档中的注释部分的对象,它主要包含注释的内容以及相关的操作。(<!– Our to do list data –> )
-
TiXmlElement:对应于XML文档中普通的元素的对象,每个元素有一个对应的名字,另外还可以有一些属性。TiXmlElement包含了这些相关信息及其操作。 ( <ToDo> <Item priority=”1″> <bold> <Item priority=”2″>)
-
TiXmlText: 对应于XML文档中元素中的文本信息的对象,它实现了文本信息相关的操作。(Go to the , Toy store!, Do bills)
-
TiXmlAttributeSet: XML文档中某个元素的所有属性的集合,它是TiXmlElement的一部分,它用来管理该元素的所有属性。
-
TiXmlAttribute: XML文档中的元素的属性所对应的对象。它是一个name-value pair对象,name是属性名,value是属性值。
-
TiXmlUnknown: 所有的用上面的对象不能表示的内容所对应的对象。
-
TiXmlHandler:定义了针对XML的一些操作。
TinyXML2实现了一个名为MemPoolT的模板类,创建对象时,均是由XMLDocument持有的MemPoolT对象来进行内存分配,在MemPoolT中,分配的内存以链表形式连接起来,统一管理,统一释放。因此,即便是所创建的节点未被链接到文档树中,也不会造成内存泄漏,所以,无需显式的执行delete操作。