Ergebnis 1 bis 5 von 5

Thema: XML-Parser-Klasse auf Expat-Basis

  1. #1
    seb
    seb ist offline
    TP-Veteran
    Registriert seit
    Jan 2002
    Beiträge
    1.741

    XML-Parser-Klasse auf Expat-Basis

    Ein simples Scriptchen, welches PHP's event-basierten Expat-Parser verwendet, um den Inhalt eines XML-Dokuments in eine multidimensionale Array-Struktur zu erzeugen.

    Die Idee zur Lösung des Problems mit Referenzen und Ebenen-Stack war zugebenermaßen nicht meine - ohne Abgucken von einem andern Script, das folglich nach demselben Prinzip funktioniert, wär ich dadrauf definitiv nicht gekommen....aber mein Code is noch n bisschen kürzer ;D.

    Zur Verwendung:

    Objekt der Klasse instanzieren und die XML-Datei als Argument übergeben.

    Das Array mit den XML-Daten steht dann als $objektname->XMLdata zur Verfügung, Schreibweise ist folgende:

    $objektname->XMLdata['ELEMENTNAME'][x]['ELEMENTNAME'][x]['ATTR']/['CDATA']

    wobei x für die Nummer des Elements mit dem angegeben Elementnamen auf der jeweiligen Ebene steht.

    $objektname->XMLdata['GUESTBOOK'][0]['ENTRY'][3]['CDATA']

    würde z.B. die cdata-Sektion (den Inhalt zwischen Öffnen- und Schließen-Tag) das 3. Child-Elements mit dem Tagnamen <entry> innerhalb des des Root-Elements <guestbook> zurückliefern. Alles klar?
    Angehängte Dateien Angehängte Dateien

  2. #2
    TP-Supporter Avatar von Hydrax
    Registriert seit
    Jun 2001
    Ort
    Berlin
    Beiträge
    302
    Hui, nett nett das ganze.
    Hätte ich vorher mal gebrauchen können. Ehrlich gesagt habe ich an sowas garnicht gedacht als ich meine XML Parser Sachen geschrieben habe.
    Ich mach das alles händisch. Nach XML-Tag gucken. Wenn XML-Tag jener ist, wird jenes Feld vom Array gefüllt
    Also alles viel zu viel Aufwand bei mir

    Eine Frage zum verständnis hätte ich noch.

    Was bewirkt das & bei solchen Aufrufen?
    PHP-Code:
    $element = & $this->XMLdata
    Hab ich da was wichtiges verpasst was man einsetzten kann?

    Bye.
    keep looking forward... Hydrax

  3. #3
    Registered User Avatar von Toxical
    Registriert seit
    Dec 2001
    Ort
    Berlin
    Beiträge
    1.059
    Das
    Code:
    &
    bewirkt, dass
    Code:
    $element
    nur eine referenz(?) auf
    Code:
    $this->XMLdata
    ist, keine Kopie, das heisst wenn du
    Code:
    $element
    veränderst, veränderst du auch
    Code:
    $this->XMLdata
    und umgekehrt, in deinen variablen steht also immer der selbe Inhalt.

    Hoffe das war richtoig erkläre, man möge mich gegebenenfalls korrigieren

  4. #4
    TP-Supporter Avatar von Hydrax
    Registriert seit
    Jun 2001
    Ort
    Berlin
    Beiträge
    302
    Ja das wird es auch sein. Jetzt klingelts wieder im Gedächnis bei mir.

    Danke!...
    keep looking forward... Hydrax

  5. #5
    seb
    seb ist offline
    TP-Veteran
    Registriert seit
    Jan 2002
    Beiträge
    1.741
    Genau

    Das Script macht sich die Möglichkeit zu Nutze, um das unter Umständen weit verzweigte Array-Abbild des XML-Elementbaums zu erzeugen.

    Dies geschieht per Schleifendurchlauf des Stack-Arrays beim Auftreten jedes neuen Elements, in dem zu jedem Zeitpunkt die Tagnamen der momentan geöffneten Elemente aufgelistet sind (wird ein Element geschlossen, so wird es auch aus dem Stack wieder entfernt).

    Der Stack dient praktisch als 'Landkarte', nach der die Referenz auf das Array von einem Element auf das nächste gesetzt wird.

    Am Ende des im Stack angegebenen 'Pfades' werden schließlich neue Daten hinzugefügt (Attribute oder Kindelemente) und so das Ergebnis-Array Element für Element erweitert.

    Ich find die Vorgehensweise genial einfach, aber wie gesagt...die Idee is geklaut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51