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

标签 c++ xml rapidxml pugixml

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

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

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

谢谢!

最佳答案

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

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

关于c++ - 使用 pugixml 和 rapidxml 移动(不复制)节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229215/

相关文章:

c++ - 基于单个属性/访问器的聚合设计类层次结构

c++ - 对 Singleton::Singleton() 的 undefined reference

c++ - tinyXml如何添加一个元素

java - Jersey 默认媒体类型(如果不存在 Accept header )

xml - 字符引用 "&#x1F"是无效的 XML 字符

c++ - RapidXML 加载 xml 文件

c++ - 编写用于识别 void 类型的完全特化的问题

xml - 在 xslt 中创建序列号

c++ - 如何从 XML 文件中读取信息 C++

c++ - RapidXML: "expected <"文件末尾错误与空白错误相关?