我自闲庭信步,悠然自得,不亦乐乎.

                                       ------ Keep life simple
GMail/GTalk/MSN:huyi.zg@gmail.com

 

再次重写了XML解析模块

最开始用的libxml2,linux上倒是方便,但为了在win上使用这个,需要编译一大堆附加库,还要带上大家伙,本来是为了图方便,没想到更加的麻烦,而且在实际使用中,也并不顺手。鉴于此,我放弃了libxml2。

之后又瞄准了arabica,一个针对C++的解析库,严格的说是一组包装类,在底层还是靠expat等其他引擎来解析xml的。这回看起来爽多了,不用担心平台问题了。在实际使用中,引了一大堆的头文件,继承了一堆父类,虽然类责任更加明确了,但这确实不是我所喜欢的方式,简单就是最好,这是我所推崇的。尽管如此,为了图便宜,我还是没有放弃采用arabica,甚至为它禁用了一个原先工作正常,但现在有冲突的标准lib文件(可恶的LN2005错误),但最后还是发现,arabica在一些地方并不完善,文档也不全面,很费了一番周折才work起来不说,出了问题还要搞半天,我只是想要简单的解析功能,实在不想去研究透澈一个第三方库。

一气之下,决定自己封装expat,花了1个多小时,整个世界清静了,现在一起看起来那么干爽,一切都回归到预想与控制中。功能可能不如第三方库全面,但也足够了,而且需要的话可以再添加。长叹一口气,主席说过,自己动手,丰衣足食。

至于再高一层,我并没有像wildfire那样,用pull的方式,边执行逻辑,边解析。
我希望能得到pull模型给程序结构带来的一些好处,但又不想把解析xml的动作带到整个程序中,最好能在一处解析完,但又能继续使用pull模型。为此,设计了XmlBlock对象的一个队列结构来模拟pull操作,也受到了ACE中ACE_Message_Block机制的一些影响。
后来又仔细想了想,其实内部利用std::list就可以了,做一个wrapper,公布一个一次性的ForwardIterator,就可以模拟出Stream操作的特点了,现在还没有必要做的像ACE_Message_Block那样精。


具体做法,今后会写进文档中。

posted on 2006-04-29 00:36 HuYi 阅读(470) 评论(0)  编辑 收藏 引用 所属分类: Server


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(12)

随笔分类

相册

收藏夹

友情链接

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜