fritz85: XML File mit PHP auslesen

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

  1. Hallo,

    nimm doch phps simplexml.

    Gruß

    jobo

    1. nimm doch phps simplexml.

      oder gleich DOM

    2. Hallo,

      nimm doch phps simplexml.

      hast du da gerade ein Beispiel welches zu meinem XML passen könnte?
      Ich peil das einfach nicht

      1. 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

        1. 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

          1. 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 -.-

            1. 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

              1. 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?

                1. 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

                  1. 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

                    1. 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

                      1. Mein Problem ist eigentlich nur die Elemente in einer Foreach auszugeben - den Rest kann ich :)

                        1. 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

                          1. 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

                            1. 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

                              1. 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

                                1. 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

                                  1. Hallo,

                                    du verstehst phps foreach nicht und ahmst meinen code nicht nach.

                                      
                                    foreach ($xmlfile->previewpictures->landscape->big as $someKeyName => $ausgabe)  
                                     	{  
                                     		echo $someKeyName;  
                                     	}  
                                    
                                    

                                    Gruß

                                    jobo

                                    1. 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
                                      
                                      1. 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

                          2. 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.

                            1. 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