DOMElement克隆和追加:'错误的文档错误'

时间:2009-11-18 21:16:09

标签: php xml dom domdocument

有些东西我不完全了解使用PHP的DOM api进行节点克隆。这是一个示例文件,可以快速复制我遇到的问题。

$doc  = new DOMDocument( '1.0', 'UTF-8' );
$root = $doc->createElement( 'root' ); // This doesn't work either $root = new DOMElement( 'root' );
$doc->appendChild( $root );

$doc2  = new DOMDocument( '1.0', 'UTF-8' );
$root2 = $doc2->createElement( 'root2' );
$doc2->appendChild( $root2 );

// Here comes the error
$root2->appendChild( $root->cloneNode() );

运行此小片段时会抛出异常

  

致命错误:未捕获的异常   'DOMException',消息'错误   文件错误'

我是否可以从文档中获取节点,克隆它,然后将其附加到另一个文档?

2 个答案:

答案 0 :(得分:48)

在将节点添加到DOM之前,使用DOMDocument->importNode将节点导入到其他文档中。

答案 1 :(得分:0)

您必须将importNode方法的结果附加到DOM。请记住,该方法在无法导入时可能会返回

if ($importedNode = $doc2->importNode($root->cloneNode())) {
    $root2->appendChild($importedNode);
}

如果您需要导入节点,它的所有子节点(反复地)和/或节点的属性使用可选的第二个参数deep

if ($importedNode = $doc2->importNode($root->cloneNode(), true)) {
    $root2->appendChild($importedNode);
}