最近因为项目的需要,将一个应用软件的底层XML处理模块进行重写,由MSDOM改用xmlLite来完成。XmlLite是微软专门针对C++使用者开发的一个轻量级开发包,只具备基本的I/O功能。提供了IXmlReader, IXmlWriter对XML文件进行简单的读写操作。原理很简单,在读一个文件时,循环读取各个节点,然后根据不同的节点类型读取其相关属性数据等。XMLLite中的数据类型主要封装在XmlNodeType中,常使用到的有XmlNodeType_None, XmlNodeType_Element,XmlNodeType_EndElement等。在写数据时,主要根据不同的节点类型,调用相关的API来完成。值得注意的是,由于XMLLite只提供顺序化写的功能,因此在写具有多个深度的节点类型时,需要控制好WriteEndElement()函数的出现顺序等,所以这些都可以通过函数的递归来完成。
由于XmlLite只提供简单的读写等功能,因此,在实际应用中,需要对XMLLite提供的功能进行一定的封装,从而提供自己的API功能。下面简单说说我们采用的思路。在读Xml文件时,需要在加载过程建立XML文件的内部数据结构。这可以通过两种方式来完成,一种是在一个循环或者递归过程中,将整个XMLload进来;另外一种方法是一次只加载一层节点,然后递归加载其子节点。前面一种方法是在处理大XML文件时,可能会有memory footprint问题。所以最终采用了后面的方法。
在实现过程中,我们采用了composite模式来组织XML文件树结构。通过使用list来建立树结构。全部操作封装在一个类中。
有关相关原因,xmlLite的具体封装实现方法就不提及了。开发过程中,遇到的主要难点是数据的读写和保存,关键是数据结构的处理,其他部分都比较容易。
这我开通blog后的第一篇文章,呵呵,也不知道怎么写好。以后会尽力写好点^_^.