主题:SOUI为什么使用pugixml作为XML解析器?

admin 2018年12月08日 192

目前开源的XML解析器不好,比如tinyxml,rapidxml等等。pugixml采用了inplace parse技术,也就是说直接使用输入的数据内存来记录key-value的值,减少了小块内存分配申请,内存复制等,从而提交效率。

从rapidxml的介绍中提供的一个速度对照比来看,pugixml和rapidxml的效率基本在一个水平,但是rapidxml稍快一点。既然rapidxml更快,为什么不用rapidxml呢?

事实上,soui的前身是duiengine,duiengine的前身又是bkwin, bkwin时代用的XML解析器是tinyxml,tinyxml解析速度比较差,后来考虑换XML解析,也考虑过rapidxml,最终选择pugixml主要是因为pugixml的API设计得太友好了。

比如我要操作一个节点路径为:

root/sub1/sub2.在pugixml里,可以用下面的代码:


pugixml::xml_document doc;
doc.load("xxx.xml");
pugixml::xml_node node= doc.child("root").child("sub1").child("sub2");

再比如,在pugixml中,每一个结点都是一个对象,不直接使用指针,可以有效的防止空指针。要判断一个对象是不是为空,有bool重载,直接判断即可。

比如:

 pugixml::xml_node node1 = doc.child("root").child("sub_1").child("sub2"); 

上面的代码运行不会崩溃。

 但是if(node1) 会返回false.这是我选择pugixml非常重要的一个原因。