tinyxml源码解析

  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这几个类构成,它们之间的关系如下图所示:

tinyxml源码解析_第1张图片

        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文件的每部分都是树中的一些节点或者内容。如下图所示:

tinyxml源码解析_第2张图片


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

[html] view plain copy
  1. xml version="1.0" ?>  
  2. <phonebook>  
  3.     <item>  
  4.         <name>hangzhou hduname>  
  5.         <addr>hang zhouaddr>  
  6.         <tel>110tel>  
  7.         <email>[email protected]email>  
  8.     item>  
  9.     <item>  
  10.         <name>hdu2name>  
  11.         <addr>hang zhouaddr>  
  12.         <tel>111tel>  
  13.         <email>[email protected]email>  
  14.     item>  
  15.     <item>  
  16.         <name>hdu3name>  
  17.         <addr>hang zhouaddr>  
  18.         <tel>112tel>  
  19.         <email>[email protected]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


你可能感兴趣的:(c++开源库)