3

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

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

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

谢谢!

4

1 回答 1

4

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

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

于 2014-08-11T00:27:26.267 回答