PHP DOMDocument将节点从一个文档移动到另一个文档

PHP DOMDocument将节点从一个文档移动到另一个文档,php,domdocument,Php,Domdocument,好吧,我已经努力了好几个小时了,但似乎找不到解决办法,所以我来了 我有两个DOMDocument,我想将一个文档的节点移动到另一个。我知道这两个文档的结构,并且它们的类型相同(因此合并它们应该没有问题) 有人能帮我吗?如果你需要更多信息,请告诉我 谢谢 您需要将其导入到目标文档中。请参见要将节点复制(或)移动到另一个DOMDocument,您必须使用将节点导入新的DOMDocument。手册中的示例: $orgdoc = new DOMDocument; $orgdoc->loadXML(

好吧,我已经努力了好几个小时了,但似乎找不到解决办法,所以我来了

我有两个DOMDocument,我想将一个文档的节点移动到另一个。我知道这两个文档的结构,并且它们的类型相同(因此合并它们应该没有问题)

有人能帮我吗?如果你需要更多信息,请告诉我


谢谢

您需要将其导入到目标文档中。请参见

要将节点复制(或)移动到另一个
DOMDocument
,您必须使用将节点导入新的
DOMDocument
。手册中的示例:

$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);
$orgdoc=新DOMDocument;
$orgdoc->loadXML(“子项中的文本”);
$node=$orgdoc->getElementsByTagName(“元素”)->item(0);
$newdoc=新文档;
$newdoc->loadXML(“某些元素中的文本”);
$node=$newdoc->importNode($node,true);
$newdoc->documentElement->appendChild($node);

其中,
importNode()
的第一个参数是节点本身,第二个参数是指示是否导入整个节点树的布尔值。

将此代码用于未知的文档结构

$node = $newDoc->importNode($oldDoc->getElementsByTagName($oldDoc->documentElement->tagName)->item(0),true);
loadXML($child);
$node=$DOMChild->documentElement;
$DOMParent=新的DOMDocument;
$DOMParent->formatOutput=true;
$DOMParent->loadXML($parent);
$node=$DOMParent->importNode($node,true);
如果($tag!==null){
$tag=$DOMParent->getElementsByTagName($tag)->项(0);
$tag->appendChild($node);
}否则{
$DOMParent->documentElement->appendChild($node);
}
返回$DOMParent->saveXML();
}
?>

如何循环遍历文档的所有节点?我认为foreach是可行的……最简单的方法是像这样使用XPath:
XPath=newdomxpath($doc)$allNodes=$xpath->query('/*')
<?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();
    }
?>