Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php DomeElement克隆和附加:';错误的文档错误';_Php_Xml_Dom_Domdocument - Fatal编程技术网

Php DomeElement克隆和附加:';错误的文档错误';

Php DomeElement克隆和附加:';错误的文档错误';,php,xml,dom,domdocument,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 DO

关于使用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() );
当您运行这个小片段时,会引发一个异常

致命错误:未捕获异常 带有消息“错误”的“DomeException” 文件错误'


我不能从文档中获取节点,克隆它,然后将其附加到另一个文档中吗?

用于在将节点添加到DOM之前将其导入到另一个文档中。

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

if ($importedNode = $doc2->importNode($root->cloneNode())) {
    $root2->appendChild($importedNode);
}
如果需要导入节点,则其所有子节点(重新导入)和/或节点的属性都使用可选的第二个参数
deep

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

太好了,谢谢。我在
DOMNode
DOMElement
API中搜索可以让我这么做的东西,但(愚蠢地)从未检查过
DOMDocument
方法=/你在哪里添加了importNode?我将其添加到我的代码中,但仍然出现错误。@您需要调用
importNode
将节点从一个文档导入到另一个文档。之后,您可以将其作为子项附加到需要的位置。我正在处理深度嵌套的标记,因此需要调用
$parent->ownerDocument->importNode($child,true)
,然后才能添加它。