TinyXML简单记录

啰嗦的开场白

tinyxml是开源的,小巧的xml处理库,c++编写。

在这里可以下载到最新的源码:http://sourceforge.net/projects/tinyxml/


当前我下载到的最新版本为2.6.2

下载后解压,可以找到sln文件,vs2010及以上版本可以打开。


可以看到一共4个工程,其中有用的有2个,另外2个是test工程。

tinyxml和tinyxmlSTL,以及2个对应的test。

编译后发现有报错,成功2个失败2个,查看错误发现出错的是2个test工程,打开代码文件,发现主要是里面的字符编码问题,据说修改字符编码就可以。

不需要test,所以无视。

2个lib都编译成功了。


tinyxml是一般c++实现的,tinyxmlSTL是使用STL实现的,使用起来基本没啥区别,看个人习惯和爱好了。

简单说,就是用char*和std::string的区别。

大部分人喜欢STL版本的,我就觉得普通版本的就挺好,所以就直接拿了普通版的用。

需要编译出来的lib文件(tinyxml.lib,如果你喜欢STL版本的,就拿tinyxmlSTL.lib),以及2个头文件(tinyxml.h和tinystr.h),拷贝到工程里,包含下就好。


OK,可以准备自己test了,网上入门教程很多,个人参考了这个:

http://www.cnblogs.com/kex1n/archive/2010/10/03/1841502.html

感谢作者翻译。



几个类

tinystr.h

这里只有2个类,这2个类都是对stl中的类的模拟,一个string,一个outstream。

tinyxml.h

这里才是tynixml的关键部分,包含node、attribute、element等。

重要的注释:

/*<span style="white-space:pre">	</span>A Document can contain:	Element	(container or leaf)
							Comment (leaf)
							Unknown (leaf)
							Declaration( leaf )

	An Element can contain:	Element (container or leaf)
							Text	(leaf)
							Attributes (not on tree)
							Comment (leaf)
							Unknown (leaf)

	A Decleration contains: Attributes (not on tree)
*/



内存管理

需要注意的是,外面new的数据,通过不同的函数加到xml内容里,内存管理方式是不同的,有些会直接把相应的内存管理直接拿到库内部去,也就是由库内部来负责delete。有些则还是不管,这些就需要自己来做delete。

具体的可以看相应的英文说明。

这里说下2个我用到的函数:

InsertEndChild:这个函数只是将元素添加到xml文档里,元素本身的内存管理还是要自己搞定

LinkEndChild:这个函数将元素添加到xml文档里,同时将内存管理也交给库,可以看到函数说明里有这么一句:

the node to be added is passed by pointer, and will be henceforth owned (and deleted) by tinyXml.








你可能感兴趣的:(TinyXML简单记录)