Problem mit RegEX & eigenem "XMl-Parser"

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

  • Problem mit RegEX & eigenem "XMl-Parser"

    Hi,
    ich versuche gerade für eins meiner Projekte einen eigenen XML-Prser zu programmieren und zwar möchte ich es möglichst so machen, dass ich mittels einer Funktion und while() bzw. foreach() alle Untercontainer und deren Unterkontainer ausgeben kann. Ein Beispiels XML-File ist hier:


    (<?xml.., äußerer Kontainer sind entfernt)
    Code:
    <buch>
    <haupttitel>Auf der Schwelle zum nächsten Jahrtausend</haupttitel>
    <haupteintrag>Marchand, Pierre Hrsg.</haupteintrag>
    <verfasserangabe>Pierre Hrsg. Marchand</verfasserangabe>
    <untertitel>Vom Hochgeschwindigkeitszug zur Gentechnik</untertitel>
    <ISBN>3-570-08650-X</ISBN>
    <rückgabedatum></rückgabedatum>
    </buch>
    <buch>
    <haupttitel>Spirou und Fantasio: Das Versteck der Muräne</haupttitel>
    <haupteintrag>Spirou und Fantasio: Das Versteck der Muräne</haupteintrag>
    <verfasserangabe></verfasserangabe>
    <untertitel></untertitel>
    <ISBN>3-551-01207-5</ISBN>
    <rückgabedatum></rückgabedatum>
    </buch>
    <buch>
    <haupttitel>Spirou und Fantasio: Der doppelte Fantasio</haupttitel>
    <haupteintrag>Spirou und Fantasio: Der doppelte Fantasio</haupteintrag>
    <verfasserangabe></verfasserangabe>
    <untertitel></untertitel>
    <ISBN>3-551-01206-7</ISBN>
    <rückgabedatum></rückgabedatum>
    </buch>
    Der Parser soll praktisch jeden Knoten "<buch>" in einem Array auflisten, sodass aber auch wie bei mysql_fetch_array auf die Unterobjekte (in dem Fall: haupttitel, verfasserangabe,...) zugegriffen werden kann:

    PHP-Code:
    while(function()) {
    echo 
    $node["haupteintrag"]." ".$node["verfasserangabe"];

    Also die einzelnen (indem Fall: "<buch>") Knoten kann ich schon auslesen. Diese sind in einem Array gespeichert. Das einzigste problem ist jetzt noch: Wie komme ich dynamisch an den Inhalt aller Unterknoten dran?

    Ich dachte vlt mit einer RegEx. Aber wie könnte ich das lösen?

    Mein 1. Ansatz:
    PHP-Code:
    foreach ($containers as $container) {
        echo 
    preg_split("<\s*\w*> *[a-zA-Z0-9\S ]*<*\s*>"$container);

    -> Kommt aber nur Müll bei raus.

    Hat irgenjemand einen Tipp für mich?

    Danke,
    Micronax

  • #2
    preg_match_all('|<(\w+)>(.*)</\1>|isU', $container, $parts);

    edit: achso, in $parts hast du dann ein neues array, musst du dann halt noch mit einer schleife durchlaufen.
    testweise kannst du es dir ja mal ausgeben lassen: echo '<pre>'.htmlentities(print_r($parts, true)).'</pre>';
    Zuletzt geändert von 3DMax; 24.02.2007, 13:26.

    Kommentar


    • #3
      Yeah! Hab ich schon gemacht. Ich kenne zwar preg_match_all, aber das ich hab's bis jetzt noch nie mit mehr als 2 Parametern benutzt. Auf die Idee wäre ich auch nicht gekommen.

      Dann danke erstmal

      Micronax

      Kommentar

      Lädt...
      X