2011-04-20 47 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(); 
    } 
?> 
相关问题