簡體   English   中英

DOMElement克隆和追加:'錯誤的文檔錯誤'

[英]DOMElement cloning and appending: 'Wrong Document Error'

有些東西我不完全了解使用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',消息'Wrong Document Error'

我是否可以從文檔中獲取節點,克隆它,然后將其附加到另一個文檔?

在將節點添加到DOM之前,使用DOMDocument->importNode將節點導入到其他文檔中。

您必須將importNode方法的結果附加到DOM。 請記住,該方法在無法導入時可能會返回false

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

如果需要導入節點,則所有子節點(反復地)和/或節點的屬性都使用deep可選的第二個參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM