DOMElement Klonen und Anhängen: ‚Falscher Document Error‘
-
20-09-2019 - |
Frage
Es gibt etwas, das ich mit der PHP-DOM api nicht vollständig über Knoten Klonen verstehen. Hier ist eine Beispieldatei, die das Problem schnell dupliziert ich komme über.
$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() );
Wenn Sie diese wenig laufen Snippet wird eine Ausnahme ausgelöst
Fatal error: Uncaught Ausnahme ‚DOMException‘ mit der Meldung ‚Wrong Dokument Fehler "
Kann ich nicht einen Knoten aus einem Dokument packen, Klon, und es dann in ein anderes Dokument anhängen?
Lösung
Verwenden Sie DOMDocument->importNode
den Knoten in das andere Dokument zu importieren, bevor Zugabe zu das DOM.
Andere Tipps
Sie müssen das Ergebnis der importNode
Verfahren anhängen zu das DOM. Beachten Sie, dass die Methode false zurückgeben könnte, wenn es nicht importiert werden kann
if ($importedNode = $doc2->importNode($root->cloneNode())) {
$root2->appendChild($importedNode);
}
Wenn Sie den Knoten importieren, all seine untergeordneten Knoten (resursively) und / oder des Knotens Attribute verwenden Sie den optionalen zweiten Parameter deep
:
if ($importedNode = $doc2->importNode($root->cloneNode(), true)) {
$root2->appendChild($importedNode);
}