最近一直在看tinyxml源码,虽然这个代码量不是很大,但是把C++能够用到的东西都用上了,看了整整一天,才算看的差不多了,给出我的几点建议。
一、几个类的理解,一定要沉下心去看(盗网上的一张图)
二、看这个源码的建议
(1)先大概的看以下这几个类,从TiXmlBase看起,再看TiXmlNode,最后看继承的那个类,主要看类中有哪些成员函数以及成员变量。
(2)从XmlTest.cpp的main函数开始看起,主要看LoadFile和Parse这两个函数的实现,内部实现一定要看的仔细。
(3)这个代码实现,像一棵树一样,理解下面这几个指针
TiXmlNode*parent;
NodeType type;
TiXmlNode* firstChild;
TiXmlNode* lastChild;
TIXML_STRING value;
TiXmlNode* prev;
TiXmlNode* next;
三、源码的使用例程
解析下面这个xml文件
<phonebook>
<!--one item behalfs one contacted person.-->
<item>
<name>miaomaio</name>
<addr>Shaanxi Xi'an</addr>
<tel>13759911917</tel>
<email>miaomiao@home.com</email>
</item>
<item>
<name>gougou</name>
<addr>Liaoning Shenyang</addr>
<tel>15840330481</tel>
<email>gougou@home.com</email>
</item>
<!--more contacted persons.-->
</phonebook>
#include <iostream>
#include <sstream>
#include <stdio.h>
#include "tinyxml.h"
using namespace std;
int main()
{
const char* path = "test.xml";
TiXmlDocument doc(path);
/* 加载这个文件 */
bool loadok = doc.LoadFile();
if(!loadok)
{
printf("can not load test,xml\n");
return 1;
}
TiXmlElement* root = doc.RootElement();
/* 打印出该xml文件里面的内容 */
doc.Print();
/**/
printf("%s\n",root->Value());
TiXmlNode* node = root->FirstChild();
printf("%d ,%s\n",node->Type(),node->Value());
TiXmlNode* node1 = NULL;
node1 = node->NextSibling();
if(node1->FirstChild() != NULL)
{
printf("typr = %d , value = %s\n",node1->Type(),node1->Value());
}
return 0;
}
四、针对上面的这个例程,我把这棵树建一下,有些指针没有标出来。