我注意到,当尝试调用 DOMNode 的 insertBefore 方法时,其中要插入的节点来自另一个文档(即不同于参考节点和插入的节点),PHP 运行时会在消息所在的位置生成 DOMException “不允许修改错误”。
尽管我确实看到一些提到插入的节点是只读的,但关于这个问题的文档似乎很少。
我发现可行的解决方法是克隆来自不同文档的节点并插入克隆。例子:
foreach($nodeChildren as $child) {
$clone = $child->cloneNode(true);
$parentNode->insertBefore($clone, $nodeToInsertInFrontOf);
}
我的问题是双重的:
1)为什么我必须克隆这个节点才能执行插入?
2)这是执行此操作的最有效方式(假设克隆的子节点可能包含多个子节点和孙子节点的多个层次结构)?