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?

War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top