rapidxml
rapidxml是目前我所用过最快的解析器, 久经考验,一经作者写成,沿用至今, 并被boost用作property_tree
然而遗憾的是不支持SAX解析, SAX解析的有点是无额外内存占用,速度比DOM更快。
SAX解析支持
于是本人闲时站在巨人的肩膀上增加了rapidxml SAX的支持, 详见: https://github.com/simdsoft/xmldrv3
pugixml
pugixml的诞生使xml的解析性能更进一步,经过使用和性能对比发现, pugixml比rapidxml稍快一些,通过源码可以知道这两个库都是侵入式解析,复用原始buffer,也就是解析过程中除了dom树和数值类型,字符串不会分配新的内存,这一思路极大提升了解析速度,后来的rapidjson也是借鉴了这一思路。
经过进一步研究pigixml代码发现,pugixml的解析过程免去了递归,这也许是pugixml比rapidxml性能稍好的主要原因了。笔者曾经看过c++ stl的map红黑树查询实现,也是一个循环搞定,完全无递归
进一步整理的SAX解析
同样, pigixml本身也不支持SAX, 于是我最近对SAX做了进一步整理: https://github.com/simdsoft/xsxml
dom解析库请使用: https://github.com/zeux/pugixml替代