克隆 libxml2 文档

Clone libxml2 document

在 libxml2 中克隆 XML 文档的已解析内存表示的最佳方法是什么?

“克隆”是指深度克隆,一种独立的数据结构,代表与原始数据相同的数据。 “最佳方式”是指实现复杂性和性能开销之间的合理折衷。因此,例如,序列化和重新解析将是几行代码,但会产生不必要的解析开销。另一方面,由于所有大小写的区别,手动克隆每个数据结构的每个成员可能会导致数百行代码。

我目前最好的选择似乎是 the xmlDOMWrapCloneNode function。但一方面,它的预期目的是克隆单个节点,因此需要格外小心来构建兼容文档并使用它来接收克隆。另一方面,如果必须克隆整个文档,其中的一些复杂性可能是可以避免的。不过,查看代码可以说明这里涉及的复杂性。复制和改编所有这些代码似乎工作量太大了。

您可能正在寻找 xmlCopyDoc:

xmlDocPtr xmlCopyDoc (xmlDocPtr doc, 
                      int recursive)

Do a copy of the document info. If recursive, the content tree will be copied too as well as DTD, namespaces and entities.

doc: the document
recursive: if not zero do a recursive copy.
Returns: a new #xmlDocPtr, or NULL in case of error.