在libxml2中克隆解析的XML文档内存表示的最佳方法是什么?
“克隆”是指深度克隆,一种独立的数据结构,代表与原始数据相同的数据。 “最佳方式”是指实现复杂性和性能开销之间的合理折衷。因此,例如,序列化和重新解析将是几行代码,但会产生不必要的解析开销。另一方面,由于所有案例的区别,手动克隆每个数据结构的每个成员可能会导致数百行代码。
此刻我最好的选择似乎是the xmlDOMWrapCloneNode
function。但一方面,其预期目的是克隆单个节点,因此需要特别小心地构建兼容文档并使用它来接收克隆。另一方面,如果必须克隆整个文档,那么一些复杂性可能是可以避免的。然而,查看代码说明了这里涉及的复杂性。复制和调整所有代码似乎太过分了。
答案 0 :(得分:5)
您可能正在寻找xmlCopyDoc
:
xmlDocPtr xmlCopyDoc (xmlDocPtr doc, int recursive)
复制文档信息。如果是递归的,内容树也将被复制,DTD,名称空间和实体也将被复制。
doc:文件
递归:如果不为零则执行递归复制 返回:一个新的#xmlDocPtr,如果出错,则返回NULL。