PHP simpleXML Problem mit String in XML Umwandlung
fr@gma
- php
0 Edgar Ehritt0 fr@gma0 ChrisB0 fr@gma0 Edgar Ehritt0 ChrisB
Hallo,
ich schreibe mit simpleXML Daten in eine XML-Datei.
Die Datensätze sehen (vereinfacht) so aus:
<person>
<beschreibung>
<name>Matrin</name>
<alter>25</alter>
</beschreibung>
</person>
Soweit gibt es auch keine Probleme.
Nun möchte ich aber auch Datensätze hinzufügen.
$xml = simplexml_load_file($file);
$xml->addChild('beschreibung', $beschreibung);
Zwar wird in die XML-Datei geschrieben, jedoch nicht als XML formatiert.
Ich habe schon alles mögliche probiert, wie z.B.
$beschreibung = $beschreibung->asXML();
bin jetzt jedoch man Ende!
Könnt Ihr mir bitte mal auf die Sprünge helfen, danke!
LG fr@gma
Hallo Frag ma,
Zwar wird in die XML-Datei geschrieben, jedoch nicht als XML formatiert.
SimpleXML schreibt von sich auch nicht in eine geöffnete Datei. Daher musst Du erklären, was Du genau gemacht hast, und wie die Ausgabe aussieht!
Ich habe schon alles mögliche probiert, wie z.B.
$beschreibung = $beschreibung->asXML();
Was würde beispielsweise folgendes ergeben?
[code lang=php]$xml =simplexml_load_file($file);
$person =$xml->addChild('person');
$beschreibung=$person->addChild('beschreibung');
$beschreibung->addChild('name','eddi');
$beschreibung->addChild('alter','32');
$beschreibung->addChild('eigenarten','eigenartig');
file_put_contents($file,$xml->asXML());
Gruß aus Berlin!
eddi
--
Was haben wir denn heute? "Kampf der Titanen" - Aha! Es treten an 0 und 1.
Hallo eddi,
$xml =simplexml_load_file($file);
$person =$xml->addChild('person');
$beschreibung=$person->addChild('beschreibung');$beschreibung->addChild('name','eddi');
$beschreibung->addChild('alter','32');
$beschreibung->addChild('eigenarten','eigenartig');file_put_contents($file,$xml->asXML());
So habe ich es jetzt auch gemacht, ich dachte nur es ist einfacher.
Die Ausgabe (in beschreibung) war so:
~~~php
<name>eddi</name><alter>32</alter>&
Vielen Dank aber für Deine Hilfe!
LG fr@gma
Hi,
So habe ich es jetzt auch gemacht, ich dachte nur es ist einfacher.
Die Ausgabe (in beschreibung) war so:
<name>eddi</name><alter>32</alter>&
Du wolltest mit $beschreibung beim Erzeugen des Elements per addChild gar keinen value für das Element mitgeben, sondern wiederum eine "Struktur" von Nachfahrenelementen.
Das geht so nicht - wenn du weitere Elemente haben willst, dann musst du diese auch jeweils erzeugen und ins Elternelement einhängen.
(Diese Elementerzeugung aus in Textform vorliegendem XML könnte dir auch simplexml\_load\_string auch abnehmen - aber dann sehe ich wieder keinen trivialen Weg, die Elemente dann wieder ins Hauptdokument einzuhängen; da scheint SimpleXML nämlich so simple gehalten zu sein, dass es dafür keine direkte Methode anbietet.)
MfG ChrisB
--
Light travels faster than sound - that's why most people appear bright until you hear them speak.
Hallo ChrisB,
Du wolltest mit $beschreibung beim Erzeugen des Elements per addChild gar keinen value für das Element mitgeben, sondern wiederum eine "Struktur" von Nachfahrenelementen.
Das geht so nicht - wenn du weitere Elemente haben willst, dann musst du diese auch jeweils erzeugen und ins Elternelement einhängen.
(Diese Elementerzeugung aus in Textform vorliegendem XML könnte dir auch simplexml_load_string auch abnehmen - aber dann sehe ich wieder keinen trivialen Weg, die Elemente dann wieder ins Hauptdokument einzuhängen; da scheint SimpleXML nämlich so simple gehalten zu sein, dass es dafür keine direkte Methode anbietet.)
Genau das ist das Ploblem.
Komischerweise funktioniert diese String-Übergabe beim Erstellen der Datei, wahrscheinlich weil die Dokument-Deklaration <?xml version=\"1.0\" encoding=\"utf-8\"?>
mit übergeben wird.
Ich habe jetzt aber solange mit allem möglichen rumprobiert, ich glaube den Faden nun entgültig verloren zu haben. Ich brauch erst mal Abstand von simpleXML.
LG fr@gma
Re:
Ich habe jetzt aber solange mit allem möglichen rumprobiert, ich glaube den Faden nun entgültig verloren zu haben. Ich brauch erst mal Abstand von simpleXML.
Gute Entscheindung. Danach sieh Dir einfach an, was simpleXML wirklich kann und was man, wenn es nur ums hinzufügen geht, mit einfachen Stringfunktionen besser erledigt. ;)
Gruß aus Berlin!
eddi
Hi,
(Diese Elementerzeugung aus in Textform vorliegendem XML könnte dir auch simplexml_load_string auch abnehmen - aber dann sehe ich wieder keinen trivialen Weg, die Elemente dann wieder ins Hauptdokument einzuhängen; da scheint SimpleXML nämlich so simple gehalten zu sein, dass es dafür keine direkte Methode anbietet.)
Genau das ist das Ploblem.
Komischerweise funktioniert diese String-Übergabe beim Erstellen der Datei, wahrscheinlich weil die Dokument-Deklaration<?xml version=\"1.0\" encoding=\"utf-8\"?>
mit übergeben wird.
Du kannst auch mit new SimpleXMLElement('<a><b><c>d</c></b></c>') ein neues solches erstellen - die XML-Deklaration hat nichts damit zu tun.
Problem ist nur *anschliessend*, dass SimpleXML dir keine Möglichkeit bietet, ein SimpleXMLElement in ein anderes bzw. ins Dokument einzuhängen.
(Man könnte natürlich den kruden Umweg gehen, erst mittels addChild ein leeres Element mit einem bei den anderen Elementnamen garantiert nicht vorkommenden Namen einzufügen, dann das ganze zurück in String-Format bringen, dort dann <LEERELEMENT /> durch die String-Repräsentation des einzufügenden XML zu ersetzen, und dann wieder XML draus machen ... das wäre aber ganz von hinten durch die Brust ins Auge, und hinsichtlich Performance sicher auch nicht zu empfehlen.)
MfG ChrisB