现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

C++著名程序库介绍(5):XML

2013-09-21 06:46 工业·编程 ⁄ 共 1923字 ⁄ 字号 暂无评论

   在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库

1、Xerces

参考网站:http://xml.apache.org/xerces-c/

Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XMLSchema 的基本完整的开放标准。

2、XMLBooster

参考网站:http://www.xmlbooster.com/

这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。

3、Pull Parser

参考网站:http://www.extreme.indiana.edu/xgws/xsoap/xpp

这个库采用pull方法的parser。在每个SAX的parser底层都有一个pull的parser,这个xpp把这层暴露出来直接给大家使用。在要充分考虑速度的时候值得尝试。

4、Xalan

参考网站:http://xml.apache.org/xalan-c/

Xalan是一个用于把XML文档转换为HTML,纯文本或者其他XML类型文档的XSLT处理器。

5、CMarkup

参考网站:http://www.firstobject.com/xml.htm

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

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

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

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

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

6、libxml++

参考网站:http://libxmlplusplus.sourceforge.net/

libxml++是对著名的libxml XML解析器的C++封装版本。

7. TinyXML [wangxinus注:一个非常小巧的XML解析库,基于DOM的。]

采用DOM模型。

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

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

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

8. pugiXml

pugixml的官方主页为:http://pugixml.org/

采用DOM模型。有兴趣的可搜索pugxml(不是pugixml)。

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

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

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

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

给我留言

留言无头像?