有没有办法将(深)元素从一个DOMDocument实例复制到另一个DOMDocument实例?
<Document1>
<items>
<item>1</item>
<item>2</item>
...
</items>
</Document1>
<Document2>
<items>
</items>
</Document>
我需要将/ Document1 / items / *复制到/ Document2 / items /.
似乎DOMDocument没有从另一个DOMDocument导入节点的方法。它甚至无法从xml文本创建节点。
当然我可以使用字符串操作来实现这一点,但也许有更简单的解决方案?
答案 0 :(得分:3)
您可以使用cloneNode方法并传递true
参数。该参数指示是否递归克隆引用节点的所有子节点。
答案 1 :(得分:0)
在Java中:
void copy(Element parent, Element elementToCopy)
{
Element newElement;
// create a deep clone for the target document:
newElement = (Element) parent.getOwnerDocument().importNode(elementToCopy, true);
parent.appendChild(newElement);
}
答案 2 :(得分:0)
以下函数将复制文档并保留基本<!DOCTYPE>
,但使用Transformer
则不然。
public static Document copyDocument(Document input) {
DocumentType oldDocType = input.getDoctype();
DocumentType newDocType = null;
Document newDoc;
String oldNamespaceUri = input.getDocumentElement().getNamespaceURI();
if (oldDocType != null) {
// cloning doctypes is 'implementation dependent'
String oldDocTypeName = oldDocType.getName();
newDocType = input.getImplementation().createDocumentType(oldDocTypeName,
oldDocType.getPublicId(),
oldDocType.getSystemId());
newDoc = input.getImplementation().createDocument(oldNamespaceUri, oldDocTypeName,
newDocType);
} else {
newDoc = input.getImplementation().createDocument(oldNamespaceUri,
input.getDocumentElement().getNodeName(),
null);
}
Element newDocElement = (Element)newDoc.importNode(input.getDocumentElement(), true);
newDoc.replaceChild(newDocElement, newDoc.getDocumentElement());
return newDoc;
}