C++,几个小巧开源xml库

来源:互联网 发布:三星s7edge清空数据 编辑:程序博客网 时间:2024/06/04 19:01

我只是找个地方标记一下,省以后忘了

 

1、CMarkup

这个只能算是半开源的。网上能下载到的CMarkup源代码,绝大多数是CMarkup 付费版的阉割版本。当然,免费版已经能满足基本的读需求,对于写需求则不能很好满足。

我只评论免费版。

CMarkup采用EDOM模型,容错性不错。可以读根节点多于一个的“非法xml文档”(xml文档根节点只有一个),例如下面的文档,CMarkup就可以处理。

<A>aaa</A><B>bbb</B>

CMarkup是"只进式" 的 。在我看来,CMarkup免费版的优点就是读效率很好,当然这是以增加用户出错几率为代价的。还以上面的文档为例,当CMarkup::FindElem("B")后,在CMarkup::FindElem("A"),就找不到了,只有CMarkup::Reset后才能找到。

尽管CMarkup提供了IntoElem,OutOfElem来导航,使用户可以在父、子节点间切换,但是如果用户忘了OutOfElem呢?如果真是这样,错误将不幸发生。

CMarkup免费版也不能移除节点的属性,而且在添加新节点时有一半的几率出错,也就是要么重新从根节点开始生成xml文档,要么就不要在现有xml文档中添加节点。

我的建议是,读xml使用CMarkup,写xml敬而远之。

 

2、TinyXml,TinyXml2

采用DOM模型

注意,TinyXml2不是TinyXml的升级版,两个是不同的xml库。TinyXml2和TinyXml同根生,只是TinyXml2更快效率更高(这以牺牲TinyXml的一部分功能为代价)

使用TinyXml或TinyXml2,只需要注意 TiXmlDocument实例的资源释放就行,其他的资源TiXmlDocument代为管理。

不支持多个根节点的xml文档解析。不支持宽字符串的xml文档解析。也就是说,使用TinyXml或TinyXml2要做好随时在wchar_t 和char切换的心里准备。

 

3、pugiXml

采用DOM模型

有兴趣的可搜索pugxml(不是pugixml)

pugiXml可以解析多个根节点的xml文档,这一点和CMarkup是一样的。

pugiXml支持宽字符串,只要打开PUGIXML_WCHAR_MODE宏就可以。 而且,pugiXml使用了命名空间,所以可以方便的生成两份xml库,一份支持char,一份支持wchar_t

pugiXml的接口设计也很人性化,简洁、高效,望文生义。

值得称赞的是,pugiXml还支持XPath。再次感谢Arseny Kapoulkine。

 

4、rapidxml

没有用过,标记一下。

据说支持wchar_t,速度很快,接口和tinyXml类似