XML File mit PHP auslesen
fritz85
- php
Hallo zusammen,
ich habe ein XML File und möchte dies mit PHP auslesen - klappt auch irgendwie :-)
Jedoch möchte ich die Daten in eine Datenbank schreiben und da stimmt glaubich mein ereg Befehl nocht nicht ganz?
Mein XML File:
<getContent generator="zend" version="1.0">
- <key_0>
<id>1</id>
<name>Name 1</name>
<description>Description 1.</description>
<stage>1</stage>
</key_0>
- <key_1>
<id>1</id>
<name>Name 2</name>
<description>Description 2.</description>
<stage>2</stage>
</key_1>
</getContent>
mein PHP Code:
$daten = file_get_contents("datei.xml"); // Datei einlesen
$daten = explode("<key_0>", $daten);
for ($zaehler = 1; $zaehler < count($daten); $zaehler++)
{
ereg("<id>(.*)</id>", $daten[$zaehler], $id);
ereg("<name>(.*)</name>", $daten[$zaehler], $name);
ereg("<description>(.*)</description>", $daten[$zaehler] , $description);
ereg("<stage>(.*)</stage>", $daten[$zaehler], $stage);
echo " $id[1] <br><br>";
}
Und als Ausgabe erhalte ich nicht die ID's, sondern das ganze XML an einem Stück!! (als Text) und nicht in Elemente
Kann mir da jemand helfen das ich für jede Variable denn passenden Content habe.. und nicht alles in der $id[1].
Gruss
fritz85
Hallo,
nimm doch phps simplexml.
Gruß
jobo
nimm doch phps simplexml.
oder gleich DOM
Hallo,
nimm doch phps simplexml.
hast du da gerade ein Beispiel welches zu meinem XML passen könnte?
Ich peil das einfach nicht
Hallo,
hast du da gerade ein Beispiel welches zu meinem XML passen könnte?
Ich peil das einfach nicht
´
mit simplexml laden und dann ggf. mit foreach durchlaufen.
Gruß
jobo
Hallo,
mit simplexml laden und dann ggf. mit foreach durchlaufen.
bzw.
$my_xml = simplexml_load_file("file.xml");
echo $my_xml->key_0->id;
ungetestet. Attribute kannst du auch ansprechen, über "attributes2 oder als array $my_xml["version"] oder so.
Gruß
jobo
Das habe ich jetzt gerade probiert :)
$my_xml = simplexml_load_file("file.xml");
echo $my_xml->key_0->id;
Leider funktioniert es nicht... also über foreach laden wäre dann so?:
$my_xml = simplexml_load_file("datei.xml");
foreach ($my_xml->getContent() as $key)
{
// Was kommt hier?
}
Oje, ist das kompliziert -.-
Hallo,
Das habe ich jetzt gerade probiert :)
$my_xml = simplexml_load_file("file.xml");
echo $my_xml->key_0->id;Leider funktioniert es nicht... also über foreach laden wäre dann so?:
Doch es funktioniert:
<?php
$xml_string = '<?xml version="1.0"?><getContent generator="zend" version="1.0">
- <key_0>
<id>1</id>
<name>Name 1</name>
<description>Description 1.</description>
<stage>1</stage>
</key_0>
- <key_1>
<id>1</id>
<name>Name 2</name>
<description>Description 2.</description>
<stage>2</stage>
</key_1>
</getContent>';
$sxo = simplexml_load_string($xml_string);
echo $sxo->key_0->id;
gibt "1" aus. getestet.
Gruß
jobo
Hallo
Doch es funktioniert:
gibt "1" aus. getestet.
Das stimmt so funktioniert es, jedoch wenn ich es als File einlesen will und muss - geht es nicht. Können das Servereinstellungen sein?
Hallo,
Das stimmt so funktioniert es, jedoch wenn ich es als File einlesen will und muss - geht es nicht. Können das Servereinstellungen sein?
Nein. Das geht genauso. Zum Testen könntest du ja auch $xml_string = file_get_contents("datei.xml"); var_dump($xml_string); machen.
Gruß
jobo
Hallo,
Nein. Das geht genauso. Zum Testen könntest du ja auch $xml_string = file_get_contents("datei.xml"); var_dump($xml_string); machen.
stimmt dann spukt er das ganze XML raus.
Mein Problem ist ja das ich alle in eine Datenbank schreiben muss und somit halt 4 Variabeln brauche (id, name, description, stage) und alle Elemente in die Datenbank schreiben...?
Gruss
Hallo,
Mein Problem ist ja das ich alle in eine Datenbank schreiben muss und somit halt 4 Variabeln brauche (id, name, description, stage) und alle Elemente in die Datenbank schreiben...?
Dein Problem, mit Verlaub, ist, dir die Aufgabe in die einzelnen Schritte zu zerlegen.
1. Problem: Daten auslesen
2. Problem: erfasst Daten in eine Datenbank packen.
Problem 1 hat im Grunde _nichts_ mit Problem zwei zu tun.
Gruß
jobo
Mein Problem ist eigentlich nur die Elemente in einer Foreach auszugeben - den Rest kann ich :)
Hallo,
Mein Problem ist eigentlich nur die Elemente in einer Foreach auszugeben - den Rest kann ich :)
Nein, dein Problem ist überhaupt erstmal ein Element gezielt zu fassen zu bekommen. Wenn du iterierst, kannst du doch problemlos auf $node->id, $node->name etc.pp. zugreifen. simple-xml ist eben simple.
Gruß
jobo
Hallo,
Nein, dein Problem ist überhaupt erstmal ein Element gezielt zu fassen zu bekommen. Wenn du iterierst, kannst du doch problemlos auf $node->id, $node->name etc.pp. zugreifen. simple-xml ist eben simple.
Ansonsten geht es so:
<?php
$sxo = simplexml_load_file("datei.xml");
echo $sxo->key_0->id;
foreach($sxo as $key => $value) {
echo $key . " - " . $value->id . "<br>\n";
foreach($value as $subkey => $subvalue) {
echo $subkey . " ---- " . $subvalue . "<br>\n";
}
}
Ausgabe:
1key_0 - 1<br>
id ---- 1<br>
name ---- Name 1<br>
description ---- Description 1.<br>
stage ---- 1<br>
key_1 - 1<br>
id ---- 1<br>
name ---- Name 2<br>
description ---- Description 2.<br>
stage ---- 2<br>
Gruß
jobo
Hallo
Ansonsten geht es so:
<?php
$sxo = simplexml_load_file("datei.xml");
echo $sxo->key_0->id;
foreach($sxo as $key => $value) {
echo $key . " - " . $value->id . "<br>\n";
foreach($value as $subkey => $subvalue) {
echo $subkey . " ---- " . $subvalue . "<br>\n";
}
}
Danke Dir vielmal es hat wunderbar geklappt. Habe jetzt schon 4 XML File richtig ausgelesen, macht richtig Spass.
Das Prinzip habe ich nur noch hier nicht verstanden:
~~~xml
<id>100</id>
<name>testname</name>
<description>testdescription>
<fskstage>18</fskstage>
<last_modified>20.03.2009 13:51:32</last_modified>
- <previewpictures>
- <landscape>
- <big>
<key_0>http://www.xyz.ch/1.jpg</key_0>
<key_1>http://www.xyz.ch/1.jpg</key_1> <key_2>http://www.xyz.ch/1.jpg</key_2>
</big>
</landscape>
</previewpictures>
Wie gelange ich jetzt nur zu key_0 + key_1 + key_2?
Einzeln auslesen hab ich es geschafft jedoch das es in einer foreach ausgelesen wird nicht.. :-/
Danke für die Hilfe
Mfg
fritz85
Hallo,
<?php
$sxo = simplexml_load_file("datei.xml");
echo $sxo->key_0->id;
foreach($sxo as $key => $value) {
echo $key . " - " . $value->id . "<br>\n";
foreach($value as $subkey => $subvalue) {
echo $subkey . " ---- " . $subvalue . "<br>\n";
}
}
>
> Danke Dir vielmal es hat wunderbar geklappt. Habe jetzt schon 4 XML File richtig ausgelesen, macht richtig Spass.
> Das Prinzip habe ich nur noch hier nicht verstanden:
>
> ~~~xml
> <id>100</id>
> <name>testname</name>
> <description>testdescription>
> <fskstage>18</fskstage>
> <last_modified>20.03.2009 13:51:32</last_modified>
> - <previewpictures>
> - <landscape>
> - <big>
> <key_0>http://www.xyz.ch/1.jpg</key_0>
> <key_1>http://www.xyz.ch/1.jpg</key_1> <key_2>http://www.xyz.ch/1.jpg</key_2>
> </big>
> </landscape>
> </previewpictures>
Wie gelange ich jetzt nur zu key_0 + key_1 + key_2?
Einzeln auslesen hab ich es geschafft jedoch das es in einer foreach ausgelesen wird nicht.. :-/
verstehe ich nicht. o.g. foreach bekommt das doch in der variable $key zu packen.
Gruß
jobo
Hallo,
verstehe ich nicht. o.g. foreach bekommt das doch in der variable $key zu packen.
also ich hab das nun so probiert:
foreach ($xmlfile->previewpictures->landscape->big as $ausgabe)
{
echo $ausgabe->$key;
}
Jedoch erhalte ich da nichts :/
Gruss
fritz
Hallo,
du verstehst phps foreach nicht und ahmst meinen code nicht nach.
foreach ($xmlfile->previewpictures->landscape->big as $someKeyName => $ausgabe)
{
echo $someKeyName;
}
Gruß
jobo
Hallo
du verstehst phps foreach nicht und ahmst meinen code nicht nach.
foreach ($xmlfile->previewpictures->landscape->big as $someKeyName => $ausgabe)
{
echo $someKeyName;
}
Doch ich ahme deinem Code nach - weil ich das selbe auch schon ausprobiert habe - jedoch ich da nur ein "big" erhalte und keine Links.
Gruss
fritz85
Hallo,
Doch ich ahme deinem Code nach - weil ich das selbe auch schon ausprobiert habe - jedoch ich da nur ein "big" erhalte und keine Links.
Naja, in meinem Beispiel werden key_1 und key_2 aber ausgegeben. Insofern kann ich dazu jetzt nicht mehr viel beisteuern. Von "Links" war jetzt ja eh keine Rede.
Gruß
jobo
Hallo,
Nein, dein Problem ist überhaupt erstmal ein Element gezielt zu fassen zu bekommen. Wenn du iterierst, kannst du doch problemlos auf $node->id, $node->name etc.pp. zugreifen. simple-xml ist eben simple.
Ja das ist ein grosses Problem.
Hallo,
Nein, dein Problem ist überhaupt erstmal ein Element gezielt zu fassen zu bekommen. Wenn du iterierst, kannst du doch problemlos auf $node->id, $node->name etc.pp. zugreifen. simple-xml ist eben simple.
Ja das ist ein grosses Problem.
see next post von mir. es ist recht einfach eigentlich.
Gruß
jobo