molily: Verständnissproblem: XML(Datensammlung) -> PHP -> XHTML

Beitrag lesen

Hallo,

$dom = domxml_open_mem($s, DOMXML_LOAD_PARSING, $error);
[...]
Das wäre mir eigentlich das liebste weil ich das sehr gut navollziehen kann was da passiert. Ich habe mal die Datei in einen String $s rein und dann danach deinen Code ausführen lassen, doch leider kam diese Warnung:

Warning: domxml_open_mem() expects at most 2 parameters, 3 given in /home/vhosts/jeenaparadies.clever-webspace.de/var/www/html/jeenas-home/phpinfo.php on line 38

Und es wurde sonst nichts ausgegeben.

Da musst du jeden einzelnen Schritt überprüfen, indem du dir die Variablen mit var_dump() ausgeben lässt.

In http://de3.php.net/manual/en/function.domxml-open-mem.php sind aber drei Parameter erlaubt und es steht dort dass diese Funktion seit PHP 4.2.1 geht und ich habe auf meinem Server 4.2.2 Woran könnte es liegen dass diese Warnung erzeugt wird?

Die gesamte PHP-Extension war immer »experimentell«. Das heißt, von einer PHP-Version auf die andere wurden Funktioen hinzugefügt und gelöscht und in ihrem Verhalten geändert. Das wurde nirgendwo dokumentiert. Der fehlerfreie Zugriff auf die Parserfehler über den dritten Parameter ($error) ist (soweit ich mich richtig erinnere) erst ab 4.3.6 möglich. Du kannst einmal domxml_open_mem($s) ausprobieren, denn lediglich der erste Parameter war (meiner Erinnerung nach) immer obligatorisch, der dritte kam erst spät hinzu. DOMXML_LOAD_PARSING als Parsing-Modus ist meines Wissens Standard, insofern kann der Parameter in dem Fall weggelassen werden.

Parsing-Fehler gibt domxml_open_mem() in dem Fall als Warnungen aus, du kannst diese nicht direkt auslesen (höchstens über Output-Buffer) und müsstest dich somit darauf verlassen, dass beim Parsen keine Fehler auftreten. Du kannst also nur mit if ($dom) ... überprüfen, ob der DOM-Baum grundsätzlich erzeugt wurde, dann ob deine get_elements_by_id die gesuchten Elemente zurückgegeben hat, ob entsprechende Knoten existieren usw.

Ich habe mir 4.2.2 noch einmal installiert: Mit $dom = domxml_open_mem($s); wird am Ende korrekterweise »Harry Potter and the Goblet of Fire (Book 4)« ausgegeben. Wahrscheinlich sind also keine besonderen Anpassungen notwendig.

Mathias