原文转载自 「挖井」 (/blog/2019/11/use-libxml2-instead-of-rapidxml/)预计阅读时间 0 分钟(共 0 个字, 0 张图片, 0 个链接)
自从知道rapidxml以来,我就一直尽量在需要XML parser的地方用rapidxml,我能说出好几个理由为什么用rapidxml而不是其他的诸如tinyxml,msxml,xerces-c++,expat等等,比如:
但是这几年在公司项目中我尝试将所有XML parser都替换成rapidxml时,却遭到了两次现实的铁拳:
rapidxml parser只有DOM接口,没有SAX
rapidxml_print功能太弱,甚至选项没做到与parser的一一对应
除此之外,还有其他一些问题,例如:
功能太少,比如无法处理HTML的情况
每次分配内存都要调用库中的方法,而且还往往要精确指定大小
已经10年没更新啦!
这次是遇到了第二个问题,每次将DOM树转成XML字符串时,发现rapidxml_print总是自做主张多做一次特殊字符转义,而在parser中却是有一个参数可以强制忽略可转义的特殊字符的。想来想去没找到简单的办法,于是只好再次投入libxml2的怀抱。
其实我是不喜欢libxml2的,原因是:
不过这次的需求环境限制比较严格,比如只会跑在主线程,会要处理HTML文档,于是用libxml2实现了一遍,所有问题都解决了。