maak
13-01-2009, 21:56
Hallo,
ich schreibe eine kleine Datenbank für Teilnahme-Eingaben, und möchte in einer aktualisierten Variante auf SimpleXML umsteigen. Leider musste ich feststellen, dass das Abspeichern einen interessanten Nebeneffekt hat. Die XML-Datei selbst besitzt folgende Grundstruktur (der Fehler tritt allgemeiner auf als in meinem Originalposting, daher hier die einfachere Version, mit dem gleichen 'Defekt'):
<root>
<item>
<id>Nummer</id>
<info1>...</info1>
<info2>...</info2>
/* usw. */
</item>
</root>
Ziel des Skripts ist die Bearbeitung bzw. das Neuhinzufügen einzelner Einträge. Der Kerncode ist der folgende:
$docu=simplexml_load_file('documentations.xml');
$docu=simplexml_load_file($filename);
$d=$n?$docu->addChild('documentation'):getID($docu,$_GET['id']);
$d->id=$id;
$d->title=toXML($_GET['title']);
// weitere Einträge
saveChanges($docu,1);
Zur Erklärung: Die Variable $n prüft nur ab, ob es ein neuer Eintrag werden soll oder nur ein alter bearbeitet wird. Im zweiten Fall sucht die Funktion getID aus dem mit simplexml_load_file geladenen XML-String das entsprechende Element heraus und liefert es zurück; saveChanges beinhaltet einfach nur die paar Zeilen, um $docu->asXML() in die Zieldatei abzuspeichern.
Das Problem: Das Bearbeiten vorhandener Einträge funktioniert einwandtfrei, nur beim Hinzufügen neuer Einträge wird der Eintrag jedesmal doppelt abgespeichert.
Interessanterweise funktioniert der folgende Code (ich hab die Routine mal in einer Testdatei neu geschrieben) fehlerfrei:
$xml=simplexml_load_file($filename);
$d=$xml->addChild('documentation');
$d->id=867486746;
$d->title='Fixer neuer Titel';
// weitere Einträge
saveChanges($xml,1);
Ich habe es auch ohne saveChanges und ohne getID versucht; keine Wirkung. Ich bin inzwischen echt ratlos, denn es kann doch nicht sein, dass der quasi selbe Code einmal funktioniert und einmal nicht?
Hat nicht vielleicht doch jemand eine Idee für des Rätsels Lösung?
Vielen Dank!
Lg, maak
ich schreibe eine kleine Datenbank für Teilnahme-Eingaben, und möchte in einer aktualisierten Variante auf SimpleXML umsteigen. Leider musste ich feststellen, dass das Abspeichern einen interessanten Nebeneffekt hat. Die XML-Datei selbst besitzt folgende Grundstruktur (der Fehler tritt allgemeiner auf als in meinem Originalposting, daher hier die einfachere Version, mit dem gleichen 'Defekt'):
<root>
<item>
<id>Nummer</id>
<info1>...</info1>
<info2>...</info2>
/* usw. */
</item>
</root>
Ziel des Skripts ist die Bearbeitung bzw. das Neuhinzufügen einzelner Einträge. Der Kerncode ist der folgende:
$docu=simplexml_load_file('documentations.xml');
$docu=simplexml_load_file($filename);
$d=$n?$docu->addChild('documentation'):getID($docu,$_GET['id']);
$d->id=$id;
$d->title=toXML($_GET['title']);
// weitere Einträge
saveChanges($docu,1);
Zur Erklärung: Die Variable $n prüft nur ab, ob es ein neuer Eintrag werden soll oder nur ein alter bearbeitet wird. Im zweiten Fall sucht die Funktion getID aus dem mit simplexml_load_file geladenen XML-String das entsprechende Element heraus und liefert es zurück; saveChanges beinhaltet einfach nur die paar Zeilen, um $docu->asXML() in die Zieldatei abzuspeichern.
Das Problem: Das Bearbeiten vorhandener Einträge funktioniert einwandtfrei, nur beim Hinzufügen neuer Einträge wird der Eintrag jedesmal doppelt abgespeichert.
Interessanterweise funktioniert der folgende Code (ich hab die Routine mal in einer Testdatei neu geschrieben) fehlerfrei:
$xml=simplexml_load_file($filename);
$d=$xml->addChild('documentation');
$d->id=867486746;
$d->title='Fixer neuer Titel';
// weitere Einträge
saveChanges($xml,1);
Ich habe es auch ohne saveChanges und ohne getID versucht; keine Wirkung. Ich bin inzwischen echt ratlos, denn es kann doch nicht sein, dass der quasi selbe Code einmal funktioniert und einmal nicht?
Hat nicht vielleicht doch jemand eine Idee für des Rätsels Lösung?
Vielen Dank!
Lg, maak