将元素从一个 DOMDocument 添加到另一个 DOMDocument PHP

Add element from one DOMDocument to another one PHP

我有 3 个DOM文档,

$legacyDomDocument1 = new DOMDocument();
$legacyDomDocument2 = new DOMDocument();
$legacyDomDocument3 = new DOMDocument();

我想获取这三个文档的相同元素并删除一些子元素。

$standortName = $legacyDomDocument->getElementById('produkt_title');
$standortName->parentNode->removeChild($standortName);
$standortName = $legacyDomDocument2->getElementById('produkt_title');
$standortName->parentNode->removeChild($standortName);
$standortName = $legacyDomDocument3->getElementById('produkt_title');
$standortName->parentNode->removeChild($standortName);

我还从第一个 DOM 中获取了一个导航栏。

 $rs = $legacyDomDocument->getElementById('submenue');

我可以轻松添加子菜单。

$r->appendChild($rs);

但我在添加其他两个 DOM 文档中的元素时仍然遇到问题。

$import = $legacyDomDocument->importNode($legacyDomDocument2, true);
$legacyDomDocument->appendChild($import);
$import = $legacyDomDocument->importNode($legacyDomDocument3, true);
$legacyDomDocument->appendChild($import);

我做错了什么? 使用 saveHTML 后,浏览器显示:

Warning: DOMDocument::importNode() [domdocument.importnode]: Cannot import: Node Type Not Supported in /is/htdocs/wp1175221_C648A6HQST/www/v9/legacyParser/index.php on line 82

第82行是我上面导入的部分。我究竟做错了什么?

不能直接导入 DOMDocument:你应该在层次结构中更深入一点,使用 documentElement 属性 代替(这会给你一个 DOMElement):

$import = $legacyDomDocument->importNode($legacyDomDocument2->documentElement, true);

顺便说一句,看起来在附加时也使用 documentElement 是合适的:

$legacyDomDocument->documentElement->appendChild($import);

这里 demo 说明了这个概念。请注意当您删除中间文件时的区别 documentElement:第二个文档的内容基本上插入到根节点附近,这几乎不是期望的结果。