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。
这里才是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.