DOMNodeのinsertBeforeメソッドを呼び出そうとしたときに、ノードが挿入されるノードが別のドキュメントからのものである(つまり、参照ノードとノードが挿入されていないPHPランタイムはDOMExceptionを生成し、そのメッセージは 'No Modification Allowed Error'です。PHP DOMNode insertBefore(変更不可能なエラー)
文書が挿入されていることについてのいくつかの言及はの読み取り専用ですが、この問題では文書が疎であるようです。
私が見つけた回避策は、別のドキュメントのノードをクローンし、クローンを挿入することです。例:
foreach($nodeChildren as $child) {
$clone = $child->cloneNode(true);
$parentNode->insertBefore($clone, $nodeToInsertInFrontOf);
}
私の質問は2つあり:
1)なぜ私は挿入を実行するために、このノードのクローンを作成する必要がありますか?
2)この操作を実行する最も効率的な方法です(クローンされた子ノードに複数の子といくつかのレベルの階層が含まれていると仮定します)。
プロットが濃くなります... 削除するノードから子ノードを移動しようとすると、同じエラーが発生します。例: $ parent-> insertBefore($ childOfA、$ A); // error –