tinyxml源码解析

来源:互联网 发布:罗麦品质365商城淘宝网 编辑:程序博客网 时间:2024/05/17 22:48
  tinyxml是一个小型的xml文件解析器,它使用文档对象模型(DOM)来进行解析,这种模型的处理方式为在解析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用户使用。整个源码主要有8个文件组成,6个头文件和2个cpp文件。tinyxml源码下载地址:tinyxml源码下载

       关于XML基础知识在这里:XML 新手入门基础知识

       关于tinyxml的简单使用请参考:tinyxml之hello world 

        tinyxml源码中主要由TiXmlBase、TiXmlAttribute、TiXmlNode、TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown这几个类构成,它们之间的关系如下图所示:


        TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承来自TiXmlBase类,其中TiXmlNode类指的是所有被<...>...<.../>包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode的基础上又衍生出这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像<... ***=...>,其中***就是一个属性。

[cpp] view plain copy
  1. //一个Document中可以包括:  
  2.        Element(container/leaf)  
  3.        Comment(leaf)  
  4.        Unknow(leaf)  
  5.        Declatation(leaf)  
  6. //一个Element可以包括:  
  7.        Element(container/leaf)  
  8.        Text(leaf)  
  9.        Attributes(not on tree)  
  10.        Comment(leaf)  
  11.        Unknow(leaf)  


源码中把整个xml文件的内容构造成了一个树形的结构,TiXmlNode类中有一下数据成员

[cpp] view plain copy
  1. TiXmlNode*    parent;  
  2. TiXmlNode*    prev;  
  3. TiXmlNode*    next;  
  4.    
  5. NodeType      type;  
  6. TIXML_STRING  value;  
  7.    
  8. TiXmlNode*    firstChild;  
  9. TiXmlNode*    lastChild;  

       NodeType为枚举类型,表示该TiXmlNode的类型,有document、element、comment、unknow、text、declaration

       TIXML_STRING为tinyxml定义的一个类型,当使用STL时,就是string类型。


这些成员变量是指针,这样就组成了整个XML文件的解析树,XML文件的每部分都是树中的一些节点或者内容。如下图所示:



下面来看一个XML文件,具体看一下其中的节点关系:

[html] view plain copy
  1. <?xml version="1.0" ?>  
  2. <phonebook>  
  3.     <item>  
  4.         <name>hangzhou hdu</name>  
  5.         <addr>hang zhou</addr>  
  6.         <tel>110</tel>  
  7.         <email>hdu1@hdu.com</email>  
  8.     </item>  
  9.     <item>  
  10.         <name>hdu2</name>  
  11.         <addr>hang zhou</addr>  
  12.         <tel>111</tel>  
  13.         <email>hdu2@hdu.com</email>  
  14.     </item>  
  15.     <item>  
  16.         <name>hdu3</name>  
  17.         <addr>hang zhou</addr>  
  18.         <tel>112</tel>  
  19.         <email>hdu3@hdu.com</email>  
  20.     </item>  
  21. </phonebook>  

       这个XML文件就是一个TiXmlDocument,它的第一个child就是TiXmlDeclaration,第二个child就是TiXmlElementTiXmlElement本身又有3个child,分别是3TiXmlElement,就是3个item节点,每个item节点有4个child,也就是4个TiXmlElement,这4个TiXmlElement的Value分别是”name”、”addr”、”tel”、”email”。其中Value为”name”的TiXmlElement只有一个child,就是TiXmlTextTiXmlText的Value就是”hangzhou hdu”。至此,整个xml树就建立完成了。


参考:

1、tinyxml源码学习-hello world


原创粉丝点击