2011-04-20 69 views
4

好的,我試圖達到這個好幾個小時,似乎無法找到解決方案,所以我就在這裏!PHP DOMDocument將節點從一個文檔移動到另一個文檔

我有2個DOMDocument,我想將文檔的節點移動到另一個。我知道這兩個文件的結構,它們是相同的類型(所以我應該沒有問題來合併它們)。

任何人都可以幫到我嗎?如果您需要更多信息,請告訴我。

謝謝!

回答

8

要複製(或)將節點移動到另一個DOMDocument,必須將節點導入到新的DOMDocumentimportNode()。從手動拍攝的實施例:

$orgdoc = new DOMDocument; 
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>"); 
$node = $orgdoc->getElementsByTagName("element")->item(0); 

$newdoc = new DOMDocument; 
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>"); 

$node = $newdoc->importNode($node, true); 
$newdoc->documentElement->appendChild($node); 

importNode()第一個參數是節點本身,第二個參數是一個布爾值指示是否要導入整個節點樹。

+2

我如何遍歷一個DOMDocument的所有節點?我認爲foreach會工作... – AlexV 2011-04-20 20:10:00

+0

最簡單的方法是使用這樣的XPath:'$ xpath = new DOMXPath($ doc); $ allNodes = $ xpath-> query('// *');' – 2011-04-20 20:13:18

0

將此代碼用於未知文檔結構。

$node = $newDoc->importNode($oldDoc->getElementsByTagName($oldDoc->documentElement->tagName)->item(0),true); 
0
<?php 
    protected function joinXML($parent, $child, $tag = null) 
    { 
     $DOMChild = new DOMDocument; 
     $DOMChild->loadXML($child); 
     $node = $DOMChild->documentElement; 

     $DOMParent = new DOMDocument; 
     $DOMParent->formatOutput = true; 
     $DOMParent->loadXML($parent); 

     $node = $DOMParent->importNode($node, true); 

     if ($tag !== null) { 
      $tag = $DOMParent->getElementsByTagName($tag)->item(0); 
      $tag->appendChild($node); 
     } else { 
      $DOMParent->documentElement->appendChild($node); 
     } 

     return $DOMParent->saveXML(); 
    } 
?> 
相關問題