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