我正在寻找一个支持DOM接口的XML库。性能对我来说很重要,所以我目前正在研究rapidxml和pugixml。
问题是我的应用程序需要修改DOM树,包括移动节点。而且我看不到这样做的直接方法(无论是使用rapidxml还是使用pugixml)。似乎我需要复制/克隆节点,如果我想移动的子树很深,这可能会导致大量的复制操作。
是否有更有效的方法来做到这一点(无论是使用rapidxml还是使用pugixml)(例如交换指针等)?如果没有,是否有其他轻量级库允许这样做?
谢谢!
pugixml现在(截至一小时前)有能力廉价地移动节点子树-参见xml_node::prepend_move/append_move/insert_move_before/insert_move_after。
请注意,这些操作不是常量时间——或者更确切地说,这些操作本身是常量时间,但是有一个验证步骤可以防止将节点移动到自己的子树中(这会导致节点与树的其余部分分离并导致内存泄漏);此步骤必须遍历新节点位置的祖先链,使移动次数为O(logN)。