2009-04-20 82 views
1

是否有任何方法將(深)元素從一個DOMDocument實例複製到另一個DOMDocument實例?將元素從一個DOMDocument複製到另一個

<Document1> 
    <items> 
    <item>1</item> 
    <item>2</item> 
    ... 
    </items> 
</Document1> 

<Document2> 
    <items> 
    </items> 
</Document> 

我需要將/ Document1/items/*複製到/ Document2/items /。

看來,DOMDocument沒有方法從另一個DOMDocument導入節點。它甚至不能從xml文本創建節點。

當然,我可以使用字符串操作來實現這一點,但也許有更簡單的解決方案?

回答

3

您可以使用cloneNode方法並通過true參數。該參數指示是否遞歸地克隆被引用節點的所有子節點。

+0

謝謝。這工作完美,我沒想到它會允許我從一個文檔複製元素到另一個:) – begray 2009-04-20 07:20:25

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); 
} 
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; 
    } 
相關問題