22. April 2009

Fehler beim Ändern von XML-Elementen mit SimpleXML

“Warning: Attempt to assign property of non-object in…” bei der Bearbeitung von XML-Elementen  mit SimpleXML.

Dieser Fehler hat mich und meinen Freund gestern Nacht zur Verzweiflung gebracht. Auch wenn die Lösung total banal ist, möchte ich sie euch nicht vorenthalten, vielleicht erspare ich so dem ein oder anderen ein paar Nervenzusammenbrüche…

Ausgangssituation: Ich lade mit SimpleXML eine XML-Datei ($xml=simplexml_load_file(beispiel.xml;) und möchte bestimmte Teile bearbeiten. Die Bearbeitung geht ganz einfach über ein Formular in dem die ID des Elementes in einem hidden-Input-Feld übergeben wird.

Anschließend möchte ich das Element z. B. durch $xml->item[$id]->date[month]=$monatEdit; ändern und anschließend mit $xml->asXML(beispiel.xml); in die XML-Datei speichern. Ich bekomme aber nur die Meldung “Warning: Attempt to assign property of non-object in…” um die Ohren geschmissen.

Die Lösung: Wie gesagt, absolut einfach, aber man muss sie erstmal sehen. Als ich die $id mit dem Input-Feld übergeben habe, wurde sie von einer Zahl in einen String umgewandelt, das wollte dann das XML-Element als Index natürlich nicht anerkennen.

Deshalb wurde ein einfaches $id=$id+0; eingefügt. Mit Hilfe des +0 wurde aus der $id ein numerischer Datentyp, komme was wolle. Sollten in einer Variable, die auf diese Art und Weise umgewandelt wird, Buchstaben oder ähnliches enthalten sein, so werden diese einfach entfernt. Es bleiben nur noch Ziffern übrig.

Den “+0-Trick” hat mein Freund übrigends in der PHP-FAQ im Artikel “Wie unterscheide ich böse Variablen von guten?” unter “3. Variablen, die eine numerische Form haben müssen.” gefunden.



4 Kommentare zu »Fehler beim Ändern von XML-Elementen mit SimpleXML«


Kommentar schreiben: