使用pugixml和rapidxml移动(不复制)节点

时间:2014-08-10 13:45:39

标签: c++ xml rapidxml pugixml

我正在寻找支持DOM接口的XML库。性能对我来说很重要,所以我目前正在研究rapidxml和pugixml。

问题是我的应用程序需要修改DOM树,包括移动节点。我无法看到这样做的直接方式(无论是使用rapidxml还是使用pugixml)。我似乎需要复制/克隆节点,如果我要移动的子树非常深,这可能会导致大量的复制操作。

是否有更有效的方法(使用rapidxml或pugixml)(例如交换指针等)?如果没有,是否还有其他轻量级库允许这样做?

谢谢!

1 个答案:

答案 0 :(得分:2)

pugixml现在(截至一小时前)能够廉价地移动节点子树 - 请参阅xml_node :: prepend_move / append_move / insert_move_before / insert_move_after。

请注意,这些操作不是常量时间 - 或者更确切地说是操作本身,但是有一个验证步骤可以防止在自己的子树中移动节点(这将导致节点与树的其余部分分离)并导致内存泄漏);此步骤必须遍历新节点位置的祖先链,使移动O(logN)。