XML parsen!

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

  • XML parsen!

    Hi, ich sitz seit Stunden an einem Problem!

    Ich möchte das folgendes XML parsen, und mir ab einem bestimmten Knoten die Struktur als Array zurückgeben lassen, weil die verarbeitung dadurch viel einfacher ist! Ihr fragt jetzt bestimmt, warum ich die ganze Struktur nicht gleich in ein Array einlesen! Antwort: Weil das XML locker 30 MB werden kann.

    Also möchte ich gern, das XML-Teilweise eingelesen wird, wie es z.B. beim xml_parser wo ich eine Start/End und Data-Funtktion angeben muss.
    Aber das nur für die Durchläufe des <command>-Tags was ja öfters vorkommt. Alles was unter <command> an Daten kommt möchte ich gern in einem Array!

    kann mir jemand helfen? Danke!

    Code:
    <xml>
        <commands>
            <command>
                <wert>
                    <unterwert> Ab Wert als Array zurückgeben </unterwert>
                </wert>
            </command>    
            <command>
                <wert>
                    <unterwert> Ab Wert als Array zurückgeben </unterwert>
                </wert>
            </command>    
        </commands>
    </xml>

  • #2
    Let me google that for you

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      An die Knoten kommst du z.B. mit einer xPath-Abfrage -> PHP: DOMXPath - Manual - für den Rest google mal nach Begriffen wie xml2array.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #4
        @streuner: wie man xml parst weiß ich im grund. ich hab doch geschrieben was ich genau will, nicht?

        @Quetschi: ja, aber hier muss ich auch erst das ganze xml einlesen, also auch nicht das was ich will...

        Kommentar


        • #5
          Hallo,

          wenn du kein komplettes DOM willst, aber die zusätzliche Handarbeit nicht scheust, kannst du auch PHP: XMLReader - Manual nehmen.

          Gruß,

          Amica
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Das DomDocument Objekt bietet hierfür die Methode getElementsByTagName(). Damit bekommst Du ein DomNodeList Objekt, welches Du dann durchlaufen kannst. Eigentlich recht easy ... aber auch dafür musst Du vorher die gesamte XML Struktur an das DomDocument übergeben.
            MM Newmedia | MeinBlog

            Kommentar


            • #7
              @AmicaNoctis: Ja, damit hab ich es auch schon probiert.

              der $reader->??? hat aber leiter keine methode der mir ab dem knoten einfach den untergeordneten XML-Code liefert! Oder doch?

              @ezkimo: jap aber bei 30 mb, geht das leider nicht mit der kompletten übergabe...außerdem will ich das mit php verarbeiten, und nicht in html ausgeben und dann mit js auslesen...das bringt keine punkte!

              Kommentar


              • #8
                Zitat von TriphunEM Beitrag anzeigen
                der $reader->??? hat aber leiter keine methode der mir ab dem knoten einfach den untergeordneten XML-Code liefert! Oder doch?
                Doch, read(Inner|Outer)XML().
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Ah ok...wo finde ich ein Beispiel dafür?

                  Kommentar


                  • #10
                    Gibt's noch nicht. Du benutzt erst open und dann immer read und für jedes Element holst du dir die Attribute. So schwer ist es auch nicht, wenn man das Handbuch nebenbei offen hat.

                    Edit: Korrektur: Beispiele gibt es genug in den Nutzerkommentaren.
                    Zuletzt geändert von AmicaNoctis; 24.03.2010, 14:28.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      PHP-Code:
                           $reader = new XMLReader();
                           
                      $reader->open('test.xml');
                           while (
                      $reader->read()) {
                              if ((
                      $reader->depth == 2) && ($reader->nodeType==XMLREADER::ELEMENT)) {
                                  echo 
                      $reader->readInnerXML();  
                              }
                           } 
                      so läufts...perfekt! danke!

                      Kommentar


                      • #12
                        Zitat von TriphunEM Beitrag anzeigen
                        @ezkimo: jap aber bei 30 mb, geht das leider nicht mit der kompletten übergabe...außerdem will ich das mit php verarbeiten, und nicht in html ausgeben und dann mit js auslesen...das bringt keine punkte!
                        Was hat das jetzt mit HTML und JS zu tun? DomDocument ist eine Klasse aus der DOM Extension von PHP.
                        MM Newmedia | MeinBlog

                        Kommentar


                        • #13
                          OffTopic:
                          Xml-Dateien in der Größenordnung mag ich irgendwie eh nicht (zumindest nicht in Webanwendungen). Bei 1MB ist mir der Overhead noch eher egal, bei 30MB kann es bei Xml aber durchaus vorkommen, dass 20MB für die Verpackung draufgehen. Wenn es irgendwie geht, sind mir Csv-Daten dann lieber.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            OffTopic:
                            Zitat von Quetschi Beitrag anzeigen
                            Wenn es irgendwie geht, sind mir Csv-Daten dann lieber.
                            Die haben den Nachteil, dass du Hierarchien wieder auflösen musst. JSON ist in diesem Zusammenhang auch ein guter Kompromiss.
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              OffTopic:
                              Zitat von AmicaNoctis Beitrag anzeigen
                              Die haben den Nachteil, dass du Hierarchien wieder auflösen musst.
                              Das meinte ich mit "wenn es irgendwie geht" und ein so großer Nachteil ist das nicht - was ist schon groß dabei, wenn man die Daten dann z.b. wieder via Array weiterverarbeitet.
                              Zitat von AmicaNoctis Beitrag anzeigen
                              JSON ist in diesem Zusammenhang auch ein guter Kompromiss.
                              Nicht um sooo viel besser, aber ja
                              Zuletzt geändert von Quetschi; 24.03.2010, 15:31.
                              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                              Schön - etwas Geschichte kann ja nicht schaden.
                              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                              Kommentar

                              Lädt...
                              X