xml parsen in php ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • xml parsen in php ...

    hallo zusammen,

    tja, php ist mit xml leider nicht wirklich mitgekommen und nun muss man sich erstmal mit den ziemlich komplizierten xml parser funktionen in php zufrieden geben. vorweg ... dom kann ich nicht benutzen, da es nicht stable ist, und was nicht stable ist, hat im unternehmenseinsatz nichts zu suchen ... nun aber wirklich zu meinem anliegen:

    ich habe http://www.php.net/manual/en/ref.xml.php jetzt schon den ganzen tag gelesen und quaele mich damit rum. in einigen anderen foren habe ich schon gefragt, bekomme aber nie antworten, weil sich wohl nur wenige mit xml in verbindung mit php beschaeftigen ... nun moechte ich endlich aber mal wissen, wie ich in php mittels expat (weil es standart ist) ein xml dokument so parsen kann, dass ich als ergebnis ein array bekomme, was aus folgendem xml file...

    Code:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <varlist>
    <var>
    <name>vorname</name>
    <value>Hans</value>
    </var>
    <var>
    <name>nachname</name>
    <value>Meier</value>
    </var>
    </varlist>
    ... ein array erzeugt:

    Code:
    array("vorname"=>"Hans", "nachname"=>"Meier");
    gibt es dafuer nicht schon irgendwo scripts fuer? ich hab nun echt schon den ganzen tag gesucht und bin es langsam leid ... muss auch nicht unbedingt ein fertiges script sein, ein loesungsansatz, der keine weiteren php-addons benoetigt, waere auch sehr hilfreich.

    gruß

    x-mas
    Zuletzt geändert von x-mas; 16.09.2002, 15:17.
    www.thefreakdatabase.de ... freak meats freak

  • #2
    es gibt diverse xml-parser für php (z.b. expat, ist z.b. bei suse 8 dabei), damit kannst per php-programmierung die xml-datei komfortabel zerlegen, alles andere ist pfusch (glaub mir ich weiss wovon ich rede, habs selber mal probiert)
    gruss
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      hallo,

      ich konnte leider bisher nur sehr wenige texte zu xml mit php finden ... ich wuerde ja auch gerne expat verwenden ... aber das ist alles so fuerchterlich kompliziert und - wie ich meine - bisher sehr schlecht kommentiert. also wuesstest du eine geeignete informationsquelle, womit ich mich da einarbeiten kann?

      gruss

      x-mas
      www.thefreakdatabase.de ... freak meats freak

      Kommentar


      • #4
        Für den Fall, dass die XML-Datei mittles XSL formatiert werden soll,
        bieten sich die XSLT-Funktionen in PHP an. Sollte dies von Interesse
        sein, kann ich hier mehr posten.

        taratus

        Kommentar


        • #5
          ob expat installierti ist, kannst du einfach mit phpinfo(); herausfinden, eine liste der befehle findest du unter
          http://www.xml.com/pub/a/1999/09/expat/index2.html
          gruss
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            @ Kropff: ich kann mit c leider so gut wie gar nichts anfangen, ich konnte aus dem text nichts wirklich ueber expat lernen, zumindest wie ich expat in php benutze.

            @ taratus: das waere sehr nett, wenn du was drueber posten koenntest.

            gruß

            x-mas
            www.thefreakdatabase.de ... freak meats freak

            Kommentar


            • #7
              @ x-mas
              du musst ja auch nichts in c proggen, das ist nur ein in c geschriebener parser, den kannst du z.b. in dein Lamp integrieren
              für php schau mal hier:
              http://www.wirelessdevnet.com/channe...lcast_php.html
              gruss
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                @ Kropff:

                das problem ist, dass ich nichts weiter irgendwie einbinden darf, keine fremden programme und so, sondern mit standartprogrammen der jetzigen php version auskommen muss. es ist halt ein produkt, das fuer unsere kunden entwickelt wird und da duerfen wir keine fremd-erweiterungen einsetzen, halt noch etwas in den webserver einbauen. deswegen wuerde ich mich ueber eine kleiner erklaerung freuen, wie ich mit den mitteln ein xml dokument parsen kann, die mir momentan in der aktuellen php version gegeben sind.

                gruß

                x-mas
                www.thefreakdatabase.de ... freak meats freak

                Kommentar


                • #9
                  ist dir die struktur des xml-docs bekannt und ist die einheitlich? dann ginge das über reguläre ausdrücke, dafür brauchst du aber einen experten. wenn du in einem xml-doc nur einen datensatz hast und die struktur einheitlich ist, könnte ich dir ein kleines script schicken, das aus einem xml-doc eine csv-datei macht, in deinem fall sähe das aber so aus:
                  vorname;Hans,nachname;Meier
                  gruss
                  peter
                  ps: falls du interesse hast, schick mal deine email-adresse mit
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    hehe, das hab ich schon selber so geregelt mit regexps (bzw. wuerden viele so machen, aber ich habe es auch mit str_replace hinbekommen). die daten hab ich also alle so in php, allerdings ist das nicht die feine loesung. xml ist doch dazu da, von einem xml parser geparst zu werden und nicht wie ein normales textfile auseinandergenommen zu werden. deswegen wuerde ich das schon gerne noch ueber den xml parser von php regeln und damit die datensaetze in dem xml file auslesen.

                    in der datei exisitiert immer auch nur ein datensatz (das xml file wird nicht als datenbank, sondern als datentransport benutzt in unserem fall) ... von daher koennte dein script bestimmt nicht schaden. ich wuerde mich freuen, wenn du es mir an gunnar.kloke@gmx.de schicken koenntest.

                    gruß

                    x-mas


                    ps: ja die struktur ist einheitlich und deswegen hab ich das auch mit dem str_replace alles rausfiltern koennen.
                    www.thefreakdatabase.de ... freak meats freak

                    Kommentar


                    • #11
                      @ x-mas

                      XSLT-Parser

                      PHP-Code:
                      <?php
                      $xp 
                      xslt_create();
                      $path="file://".getcwd()."/";
                      $result xslt_process($xp$path."datei.xml"$path."datei.xsl");

                      if (!
                      $result) {
                          
                      $msg "An error occurred on line " .__LINE__;
                          
                      $msg .= " in " .$_SERVER['PHP_SELF'] ."\n";
                          
                      $msg .= "Error no: " .xslt_errno($xp) ."\n";
                          
                      $msg .= "Error   : " .xslt_error($xp) ."\n";
                          echo 
                      $msg;
                      }
                      else echo 
                      $result;
                      xslt_free($xp);
                      ?>
                      Das Konstrukt mit $path ist wichtig. Es muss immer der absolute
                      Pfad der Datei angegeben werden !

                      taratus

                      Kommentar


                      • #12
                        uff, warum muss das gerade der absolute pfad sein? geht das nicht auch irgendwie anders? ich muss das xml file naemlich nicht direkt local oeffnen, sondern mit einem fopen, also dass es direkt an den browser gesendet wird ...

                        hilfe !!!

                        gruß

                        x-mas
                        www.thefreakdatabase.de ... freak meats freak

                        Kommentar


                        • #13
                          hab damit (fopen --> xslt) keine Erfahrung. sorry

                          taratus

                          Kommentar


                          • #14
                            ne ist ok, trotzdem danke fuer deine bemuehungen.
                            www.thefreakdatabase.de ... freak meats freak

                            Kommentar


                            • #15
                              Hallo,

                              ich habe da ein script gepostet unter

                              http://www.php-resource.de/forum/sho...&threadid=8930

                              Ist allerdings das große.

                              Hier ist die kleine Version:

                              PHP-Code:
                              <?php
                              $filename 
                              "http://www.deinserver.de/xml/mein.xml";
                              $contents implode ("",(@file($filename)));
                              $regs "";
                              $idexplode("</id>"$contents); 
                              for(
                              $i=0$i< (sizeof($id)-1) ; $i++){  
                              $filmtitel eregi("<filmtitel>([^<]+)</filmtitel>",$id[$i],$filmtitelausgabe);
                              $genre eregi("<genre>([^<]+)</genre>",$id[$i],$genreausgabe);
                              $hauptdarsteller eregi("<hauptdarsteller>([^<]+)</hauptdarsteller>",$id[$i],$hauptdarstellerausgabe);
                              $regie eregi("<regie>([^<]+)</regie>",$id[$i],$regieausgabe);
                              $teaser eregi("<teaser>([^<]+)</teaser>",$id[$i],$teaserausgabe);
                              $bewertung eregi("<bewertung>([^<]+)</bewertung>",$id[$i],$bewertungausgabe);
                              $filmplakat eregi("<filmplakat>([^<]+)</filmplakat>",$id[$i],$filmplakatausgabe);
                              $media_files eregi("<media_files>([^<]+)</media_files>",$id[$i],$media_filesausgabe);
                              $fsk eregi("<fsk>([^<]+)</fsk>",$id[$i],$fskausgabe);
                              //  wird ausgegeben



                              if ($fskausgabe[1] == "ab 16 Jahre")
                              {
                              $fsk_color="#ff0000";

                              elseif (
                              $fskausgabe[1] == "ab 18 Jahre")
                              {
                              $fsk_color="#ff0000";

                              else 
                              {
                              $fsk_color="#000000";
                              }


                              echo 
                              "<table width=353 align=center cellspacing=0 cellpadding=0 border=0>
                                  <tr>
                                      <td rowspan=3 bgcolor=33ccff><img src=\"images/1pix.gif\" width=1></td>
                                      <td bgcolor=33ccff><img src=\"images/1pix.gif\" width=1></td>
                                      <td rowspan=3 bgcolor=33ccff><img src=\"images/1pix.gif\" width=1></td>
                                  </tr>
                                  <tr>
                                      <td>
                                      <!-- left border distancetable -->
                                      <table>
                                      <tr>
                                      <td><img src=\"images/1pix.gif\" width=5></td>
                                      <td>
                                      <!-- contentbox header-->
                              <td><p class=title><font color=33ccff>"
                              .$filmtitelausgabe[1]."</font></p>


                                      <!-- subheadline -->  
                                      <p class=10bi align=left>"
                              .$hauptdarstellerausgabe[1].".<br>
                              <b>Regie:"
                              .$regieausgabe[1]."</b></p>
                                      <!-- subheadline end -->
                                      
                              <table border=0>
                              <tr>
                                  <td valign=top><img src=\"cinema_images/line.gif\" width=\"220\" height=\"1\" border=\"0\"><br><br>
                                  "
                              .$teaserausgabe[1]."
                                  <br><br><b><font color=\"
                              $fsk_color\">FSK: ".$fskausgabe[1]."</font></b><br><br></td>
                                  <td valign=top><a href=\"cinema_fullstory.php?counter=
                              $i\"><img src=http://www.palmi.net/images/".$filmplakatausgabe[1].
                              width=100 border=0 alt="
                              .$filmtitelausgabe[1]."></a><br><br><a href=\"cinema_fullstory.php?counter=$i\">
                              <img src=\"cinema_images/entertainment_arrow.gif\" width=\"12\" height=\"11\" border=\"0\"></a> mehr ...</td>
                              </tr>
                              </table>

                              <!-- <br><img src=\"images/1pix.gif\" height=8> -->
                                      <!-- contentbox footer-->
                                      </td>
                                      </tr>
                                      </table>
                                      <!-- left border distancetable end-->
                                      </td>
                                  </tr>
                                  <tr>
                                      <td height=25 bgcolor=33ccff class=wtitle>&nbsp;&nbsp;"
                              .$genreausgabe[1]."</td>
                                  </tr>
                              </table><br>"
                              ;
                              }
                              ?>
                              Dieses Script eigent sich so nur für homogene xml files. ob du die werte filters und in einzelne variablen arrays
                              steckst (z.b. $filmtitelausgabe) oder ein array machst mit

                              array("filmtitelausgabe"=>"Hans", "teaserausgabe"=>"Meier"); kannst du dir ja selber anpassen.

                              Als beispiel noch den code der xml datei:
                              <id>
                              <filmtitel>Sixt Sence</filmtitel>
                              <genre>Thriller</genre>
                              <hauptdarsteller>Bruce Willis</hauptdarsteller>
                              <regie>Keine Ahnung</regie>
                              <teaser>The sixt sence - der neue film für thrillerliebhaber</teaser>
                              <bewertung>10</bewertung>
                              <filmplakat>http://www.meinserver.de/filmplakate/sixtsence.jpg</filmplakat>
                              <media_files>http://www.meinserver.de/media/sixtsence.avi</media_files>
                              <fsk>18</fsk>
                              </id>
                              <id>
                              ...
                              </id>

                              etc.

                              Ist zwar einfach aber wirkungsvoll in der Anwendung.
                              Zuletzt geändert von ; 19.09.2002, 15:10.

                              Kommentar

                              Lädt...
                              X