Wrong Document Error! WTF?!?!

Heute Morgen war es dann mal wieder soweit. Ich habe für einen Kunden eine OOP Klassenstruktur erstellt, die es ermöglicht Settings für Formularfelder aus ini Dateien auszulesen und gleichzeitig aus diesen Angaben valide XHTML Eingabefelder zu generieren. Also ähnlich, wie es das Zend Framework eigentlich auch macht. Nur eben nicht mit hartgecodetem HTML, sondern mit dem DomDocument Objekt. Interfaces, abstrakte Klassen, Vererbungen … und dann das: Wrong Document Error!

 

DomDocument::importNode() löst so manches Problem

Die Exception wurde durch eine DomDocument Instanz ausgelöst. Ich habe nämlich versucht ein DomElement Objekt einer anderen Instanz mittels der Methode appendChild() in eine andere DomDucment Instanz einzugliedern. Bahnhof? Ja, ganz ganu! Vereinfacht ausgedrückt bedeutet dies einfach, dass man fremde Elementknoten nicht so einfach in bestehende DOM Instanzen einbinden kann. Wieso dies so ist, konnte ich bisher noch nicht in Erfahrung bringen. Aber auch hierfür gibt es sicherlich einen handfesten Grund. Ich allerdings stand zunächst erst mal vor einem Problem. Wie bekomme ich das fremde DomElement Objekt in die bestehende DomDocument Instanz?

PHP bietet auch hierfür eine elegante Lösung. Mit der Methode importNode() des DomDocument Objekts lässt sich das geschilderte Problem elegant lösen. Mit importNode führt man das erzeugte, fremde Element in eine bestehende DomDocument Instanz ein. Erst dann kann man das nun importierte Element mittels appendChild in die bestehende Struktur einfügen. Das Beispiel, welches in der PHP Dokumentation gezeigt wird, verdeutlicht das Problem nochmal genauer.

Da haben wir heute also wieder etwas gelernt. Ich muss wirklich sagen, dass mich PHP auch jetzt noch immer wieder überrascht.

About Author: Marcel
Ich bin Senior PHP Developer bei MM Newmedia. Seit 2005 bin ich begeisterter Webentwickler und arbeite als Freelancer für namenhafte Firmen und entwickle jede Menge abgefahrenes Zeug und berichte darüber in meinem Blog.

Kommentar verfassen