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,它指的是在尖括号里面的内容,像<... ***=...>,其中***就是一个属性。
- //一个Document中可以包括:
- Element(container/leaf)
- Comment(leaf)
- Unknow(leaf)
- Declatation(leaf)
- //一个Element可以包括:
- Element(container/leaf)
- Text(leaf)
- Attributes(not on tree)
- Comment(leaf)
- Unknow(leaf)
源码中把整个xml文件的内容构造成了一个树形的结构,TiXmlNode类中有一下数据成员
- TiXmlNode* parent;
- TiXmlNode* prev;
- TiXmlNode* next;
- NodeType type;
- TIXML_STRING value;
- TiXmlNode* firstChild;
- TiXmlNode* lastChild;
NodeType为枚举类型,表示该TiXmlNode的类型,有document、element、comment、unknow、text、declaration
TIXML_STRING为tinyxml定义的一个类型,当使用STL时,就是string类型。
这些成员变量是指针,这样就组成了整个XML文件的解析树,XML文件的每部分都是树中的一些节点或者内容。如下图所示:
下面来看一个XML文件,具体看一下其中的节点关系:
- <?xml version="1.0" ?>
- <phonebook>
- <item>
- <name>hangzhou hdu</name>
- <addr>hang zhou</addr>
- <tel>110</tel>
- <email>[email protected]</email>
- </item>
- <item>
- <name>hdu2</name>
- <addr>hang zhou</addr>
- <tel>111</tel>
- <email>[email protected]</email>
- </item>
- <item>
- <name>hdu3</name>
- <addr>hang zhou</addr>
- <tel>112</tel>
- <email>[email protected]</email>
- </item>
- </phonebook>
这个XML文件就是一个TiXmlDocument,它的第一个child就是TiXmlDeclaration,第二个child就是TiXmlElement,TiXmlElement本身又有3个child,分别是3TiXmlElement,就是3个item节点,每个item节点有4个child,也就是4个TiXmlElement,这4个TiXmlElement的Value分别是”name”、”addr”、”tel”、”email”。其中Value为”name”的TiXmlElement只有一个child,就是TiXmlText,TiXmlText的Value就是”hangzhou hdu”。至此,整个xml树就建立完成了。
参考: