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.
Sie können einen Kommentar hinterlassen oder einen Trackback von Ihrer eigenen Seite senden.
» Startseite: Webstylerins Blog
» Nächster Beitrag: Twitter: Friend or Follow? So miste ich meine “Followings” aus.
» Vorheriger Beitrag: Pixel Perfect und die Website passt zum Layout

Das Problem kenn’ ich, mit SimpleXML und PHP hatte ich beim Einstieg auch so meine Problemchen, aber inzwischen laeuft alles gut.
Eine Loesung fuer euer Problem haette uebrigens auch casten sein koennen, wenn ich mich nicht irre, also
$id = (int)$id;