XML und PHP4

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

  • XML und PHP4

    Nabend alle zusammen,

    Ich hab ein kleines Problem mit dem laden einer XML.
    Wir haben bislang das simpleXML von PHP5 verwendet und auch unsere Scripte so angepasst, dass sie das von simpleXML standardmäßig zurück gegebene Array nutzen.
    Dieses Array hat ja einenbestimmten Aufbau....

    Nun wurde von Anfang an nicht richtig beachtet, dass das simpleXML nur unter PHP5 geht und wir somit Fehler unter PHP4 bekommen.

    Gibts evtl. etwas vergleichbares, was ich für das Einladen der XMLs nutzen kann, was mir ein schönes klares Array der XML Daten zurück liefert? Wir haben es jetzt mal mit einer anderen Klasse namens "xml_line" versucht aber diese gibt ein eigenartiges Array zurück, was wir nicht wirklich gebrauchen können.

    Könnt Ihr mir evtl. noch etwas gutes vorschlagen, womit ich meine XML einladen kann und von dieser ein schönes Array zurück bekomme, was möglichst nicht so krass PHP Versionsabhängig ist?

    Dank euch... Mario

  • #2
    evtl. dom oder einfach nach "xml2array" googlen und verschiedene implementierungen anschauen. die skripte sind aber immer versionsabhängig. beachte, dass php 4 aber sowieso bald nicht mehr unterstützt wird.

    Kommentar


    • #3
      PHP und XML

      Genau aus diesem Grund versuche ich auch eine Versionsunabhängige Sache hinzubekommen oder zu nutzen.
      Am liebsten wäre mir ein eigenes Script, was über die Grundfunktionen von PHP die XML einliest und mir ein eigenes Array zurück gibt von der XMl. Allerdings bekomm ich das nicht hin mit den regExpr. Das ist mir irgendwie ne Spur zu hoch alles...

      Leider laufen ein großteil der PublicServer auf <PHP5... und diese werden wohl so schnell auch nicht umgestellt. Es sei denn die setzen neue Server auf. Hatte mich da mal mit einem von 1&1 und unabhängig mit einem von Strato unterhalten.

      Daher versuche ich halt ein mehr oder weniger rutimentäres Script mir selbst zu schreiben, welches halt " möglichst immer" funktioniert, wenn man die Grundlegenden PHP Funktionen nutzt um es zu schreiben.

      Ich werd mal nach DOM oder xml2array suchen...

      Mario

      Kommentar


      • #4
        Allerdings bekomm ich das nicht hin mit den regExpr.
        das wäre die einzige und gleichzeitig schlechteste lösung.
        Daher versuche ich halt ein mehr oder weniger rutimentäres Script mir selbst zu schreiben, welches halt " möglichst immer" funktioniert, wenn man die Grundlegenden PHP Funktionen nutzt um es zu schreiben.
        das ist nicht sinnvoll, aber das habe ich dir schon gesagt, als du deine anwendung safe mode tauglich machen wolltest. sehr viele anwendungen werden momentan ausschließlich für php 5 entwickelt, weil zum einen zukunft hat und zum anderen viele freiheiten bietet. versuchen, alles abzudecken, nimmt dir beide möglichkeiten.

        http://php.net/
        letzte news.

        Kommentar


        • #5
          PHP und XML

          Angenommen ich will mich nochmal selbst am einlesen einer XML versuchen.... wie könnte man dabei am besten rann gehen, wenn man die Boardeigenen Mittel vonPHP nutzt? ( also keine fertigen Versionsgebundenen Klassen )

          Ich weiß, dass es keinen Sinn macht zu versuchen alles abzudecken. Das ist mir klar... und auch nicht schaffbar.
          Aber mein System sollte sicherheitshalber halt auf PHP4 UND PHP5 laufen. Das liegt einfach daran, dass zwar PHP5 > die Zukunft ist aber dementsprechend die Anbieter noch lange nicht mit Ihren Servern nachziehen müssen. Strato zB. lassen ihre derzeitigen SharedPublicServer so wie sie sind. Und sehr viele Kunden, die wir haben, sind nunmal auf diesen drauf. Das ist eigentlich der hauptgrund, warum ich diesen Mehraufwand betreiben will/muss.
          Theoretisch liegts derzeit nur noch an dem laden der XMLs.

          Mario

          Kommentar


          • #6
            wie könnte man dabei am besten rann gehen, wenn man die Boardeigenen Mittel vonPHP nutzt?
            die antwort hast du weiter oben schon selbst gefunden.
            ... aber dementsprechend die Anbieter noch lange nicht mit Ihren Servern nachziehen müssen.
            das werden sie tun, sobald ihnen klar ist, dass php4 nicht mehr erneuert wird. allein schon aus sicherheitsgründen.
            Und sehr viele Kunden, die wir haben, sind nunmal auf diesen drauf.
            und sie haben recht, dazu geraten zu werden, bessere hosting angeboten zu nutzen (z.b. flexiblere. viele bieten 4 und 5 parallel an).
            Theoretisch liegts derzeit nur noch an dem laden der XMLs.
            muss es denn xml sein?

            Kommentar


            • #7
              PHP und XML

              XML ist einfach das einfachste und sauberste für das was wir machen.
              Ich hab über http://php.net/ ein super Script ( ne kleine Klasse ) gefunden, die ich nutzen kann. Die gibt mal ein schön sauberes Array zurück. Das gefällt mir.

              Ich musste die XML auch nur einladen. Ich will nichts speichern oder gar editieren. Dafür ist die Datenbank da.


              gruß Mario

              PS: Danke nochmal für den Link...

              Kommentar


              • #8
                Ich suche auch schon ewig nach einer einfach lösung eine XML-Datei nur auszulesen, da ich auch den Rest über die Datenbank machen will.

                jedoch finde ich gar nichts dazu .

                Das Problem an meiner XML-Datei ist, dass die meisen Script nur ein Feld lesen können, meine XML-Datei sieht aber wie folgt aus
                PHP-Code:
                <gruppen>
                  <
                team>
                    <
                person>
                      <
                person_name>name</person_name>
                      <
                person_id>name-ID</person_name>
                    </
                person>
                    <
                person>
                      <
                person_name>name</person_name>
                      <
                person_id>name-ID</person_name>
                    </
                person>
                    <
                person>
                      <
                person_name>name</person_name>
                      <
                person_id>name-ID</person_name>
                    </
                person>
                  </
                team>
                  <
                gruppe_name>name<gruppe_name>
                  <
                gruppe_id>id<gruppe_id>
                </
                gruppen

                Kommentar


                • #9
                  Original geschrieben von the_weird
                  Das Problem an meiner XML-Datei ist, dass die meisen Script nur ein Feld lesen können
                  Soll auf Deutsch heissen ...?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Ich habe ein paar Scripts getestet und dabei festgestellt, dass diese folgendes super lesen können:

                    PHP-Code:
                    <menu1>
                      <
                    menu1_titel>Titel</menu1_titel>
                      <
                    menu1_link>Link</menu1_link>
                    </
                    menu1>
                    <
                    menu2>
                      <
                    menu2_titel>Titel</menu2_titel>
                      <
                    menu2_link>Link</menu2_link>
                    </
                    menu2>
                    ... 
                    sobald aber folgendes passiert:
                    PHP-Code:
                    <menu1>
                      <
                    menu1a_titel>Titel</menu1a_titel>
                      <
                    menu1a_link>Link</menu1a_link>
                      <
                    menu1b_titel>Titel</menu1b_titel>
                      <
                    menu1b_link>Link</menu1b_link>
                      <
                    menu1c_titel>Titel</menu1c_titel>
                      <
                    menu1c_link>Link</menu1c_link>
                      ...
                    </
                    menu1>
                    ... 
                    kommt aus der Class nur noch ein Fehler zurück (bis jetzt habe ich mit der Class CXml2Array.php gearbeitet)

                    //EDIT
                    kann auch daran liegen, dass ich erst seit kurzem mit XML arbeite.

                    Ich würde gerne einfach nur person_name, person_id, gruppe_name, gruppe_id in einer Funktion an die Datenbank geben.
                    Zuletzt geändert von the_weird; 23.07.2007, 12:21.

                    Kommentar


                    • #11
                      willst du die xml datei selbst auseinander nehmen - schau ins manual unter simplexml oder dom, google danach und besorge dir ein gutes buch zum thema.

                      mit deiner problembeschreibung kann ich nichts anfangen.

                      Kommentar


                      • #12
                        XML

                        Wie penizillin im 4 Post schon geschrieben hat... findest du auf http://php.net ein paar gute Scripte.
                        Eine Klasse war darunter, die ich jetzt auch nutze und die einem ein schön sauberes Array zurück gibt.

                        Einziger Nachteil ist mir jetzt aufgefallen... das Script berücksichtigt wohl im Gegensatz zur großen SimpleXML Klasse nicht das UTF8 Format einer Datei. Als Beispiel habe ich in einer meiner XMLs DB Querys um meine Tabellen mit grundlegenden Datensätzen zu füllen. Bei meinem jetzigen Script scheint er die Umlaute etc. nicht als UTF8 in die DB zu speichern sondern er speichert direkt die UTF8 Zeichen... also zb: Hauptmenü statt Hauptmenü. Als ich noch mit SimpleXML gearbeitet hatte, war das nicht so und er legte da auch die Umlaute ordentlich mit an. Da weiß ich leider noch nicht, was der Unterschied ist oder was ich gerade noch falsch mache.

                        Gruß Mario

                        Kommentar


                        • #13
                          vielleicht werden die umlaute richtig verarbeitet und nur falsch ausgegeben. musst du selbst herausfinden. ansonsten musst du schon eine problembeschreibung liefern, auf die man eingehen kann.

                          übrigens, welche klasse benutzst du denn nun?

                          Kommentar


                          • #14
                            XML

                            Oh klar.. wollt ich doch eh machen... total vergessen.. sorry.
                            Also das hier ist mal meine Klasse, die ich derzeit nutze.
                            Einzig und allein die get_xml_array() Methode und der Konstruktor sind von mir hinzugefügt wurden. Alles andere ist original so wie ich es gefunden hatte.

                            PHP-Code:
                            class xml
                            {   
                                var  
                            $xml_pfad false;
                                var  
                            $xml_stream false;
                                
                                var  
                            $arrOutput = array();
                                var  
                            $resParser false;
                                var  
                            $strXmlDatafalse;

                            // =================================================================================================
                            // KONSTRUKTOR
                            // =================================================================================================
                                
                            function xml $xml_pfad )
                                {
                                    if ( 
                            file_exists$xml_pfad ) )
                                    {
                                        
                            $this->xml_pfad $xml_pfad;
                                        
                            $this->xml_stream file_get_contents$xml_pfad );
                                    }
                                    else
                                    {
                                        echo 
                            $xml_pfad." nicht gefunden!";
                                    }
                                }

                            // =================================================================================================
                            // RÜCKGABE DES XML ARRAY
                            // =================================================================================================
                                
                            function get_xml_array()
                                { 
                                    return 
                            $this->parse$this->xml_stream );
                                }
                                
                            // =================================================================================================
                            // XML PARSER
                            // =================================================================================================
                                
                            function parse$strInputXML )
                                {   
                                    
                            $this->resParser xml_parser_create ();
                                    
                            xml_set_object$this->resParser,$this );
                                    
                            xml_set_element_handler$this->resParser"tagOpen""tagClosed" );
                                    
                                    
                            xml_set_character_data_handler$this->resParser"tagData" );
                                    
                                    
                            $this->strXmlData xml_parse$this->resParser$strInputXML );
                                    if( !
                            $this->strXmlData )
                                    {
                                       die(
                            sprintf("XML error: %s at line %d",
                                        
                            xml_error_string(xml_get_error_code$this->resParser ) ),
                                        
                            xml_get_current_line_number$this->resParser ) ) );
                                    }
                                                   
                                    
                            xml_parser_free$this->resParser );
                                    
                                    return 
                            $this->arrOutput;
                                }
                            // =================================================================================================
                            // TAG OPEN
                            // =================================================================================================
                                
                            function tagOpen$parser$name$attrs )
                                {
                                   
                            $tag=array( "name"=>$name"attrs"=>$attrs );
                                   
                            array_push$this->arrOutput$tag );
                                }
                            // =================================================================================================
                            // TAG DATA
                            // =================================================================================================
                                
                            function tagData$parser$tagData )
                                {
                                   if( 
                            trim$tagData ) )
                                   {
                                        if( isset( 
                            $this->arrOutputcount$this->arrOutput )-]['tagData']))
                                        {
                                            
                            $this->arrOutputcount$this->arrOutput )-]['tagData'] .= $tagData;
                                        }
                                        else
                                        {
                                            
                            $this->arrOutputcount$this->arrOutput )-]['tagData'] = $tagData;
                                        }
                                   }
                                }
                            // =================================================================================================
                            // TAG CLOSED
                            // =================================================================================================
                                
                            function tagClosed$parser$name )
                                {
                                   
                            $this->arrOutputcount($this->arrOutput )-]['children'][] = $this->arrOutputcount$this->arrOutput )-];
                                   
                            array_pop$this->arrOutput );
                                }

                            Was die Ausgabe angeht, so muss ich mal schauen.
                            Was mich halt verwirrt ist, dass die Ausgabe auch in PHPMyAdmin falsch ist. Aber wenn ich den selben String ( die Querys ), die ich in meinem zurückgegebenen XML Array habe, über PHPMyAdmin selbst ausführen lasse, dann sind die Ausgaben korrekt.
                            Wie gesagt es hat sich einzig und allein die Klasse verändert, die die XML einliest... der Rest im System blieb gleich.

                            Mario

                            Kommentar


                            • #15
                              http://de.php.net/manual/en/ref.xml.php#xml.encoding

                              Kommentar

                              Lädt...
                              X