【PHP】【DOM】ノードをコピーする方法
PHPのDOMを使ってXMLを操作していると、別々に作ったDOMを一つのノードにまとめたい場合があります。cloneNodeとか使って簡単にできるかと思ったけど、ちょっとつまずいたのでメモ。
最初に書いたコード↓
$objDom2 = new DOMDocument();
$objDom2->encoding = 'UTF-8';
//文字化け対策.
$objDom2->formatOutput = true; //字下げや空白を考慮してきれいに整形した出力を行う。.
$objNode = $objDom2->appendChild( $objDom2->createElement('copy') );
$objNode->appendChild( $objAddNode->cloneNode(true) );
echo $objDom2->saveXML();
単純にもう一つDOMドキュメントを作ってコピーしたいノードをcloneNodeを使って追加しようとしてる。しかし、これだと'Wrong Document Error'で怒られる・・・。JavaScriptだとできたのに・・・。
調べてみるとimportNodeを使って、現在のDOMドキュメントに関連づけを変更しないと追加できないみたい。
修正したコード↓
$objDom2 = new DOMDocument();
$objDom2->encoding = 'UTF-8';
//文字化け対策.
$objDom2->formatOutput = true; //字下げや空白を考慮してきれいに整形した出力を行う。.
$objNode = $objDom2->appendChild( $objDom2->createElement('copy') );
$objNewNode = $objDom2->importNode( $objAddNode, true );
$objNode->appendChild( $objNewNode );
echo $objDom2->saveXML();
JavaScriptのDOMになれてるとなかなか気付かないかも。