XML Inhalt mit Regex auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XML Inhalt mit Regex auslesen

    Hi Leute,
    ich habe mich jetzt vor kurzen mal mit Regulären Ausdrücken in PHP bescchäftigt. Komme soweit auch gut voran, aber ich habe mir selbst als Übung gestellt, den Inhalt von zwei XML Tags auszulesen.

    Quellcode

    1. <?php
    2. $uri = "<xml>Test</xml>";
    3. preg_match("/Bla/", $uri, $matches);
    4. echo "<pre>{$matches[0]}</pre>";
    5. ?>

    Ich wöllte also gerne als Ergebnis "Test" haben. Ich sitze schon seit 2 Stunden daran und bin mittlerweile mit den Nerven am Ende.
    Google hat mir leider auch nicht weitergeholfen, da dort immer auf simplexml verwiesen wird. Mir gehts ja eigenetlich nur um die Übung mit den regulären Ausdrücken.
    Vielleicht kann mir ja einer sagen, wie der Ausdruck genau auszusehen hat, damit ich auf das gewünschte Ergebnis komme.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • ganz einfach.
    Das was du in Variablen haben willst packst du in Klammern.
    Und alle / musst du mit \ escapen:

    Quellcode

    1. <?php
    2. $uri = "<xml>Test</xml>";
    3. preg_match("/<xml>(.+)<\/xml>/", $uri, $matches);
    4. printf("<pre>%s</pre>", htmlentities(print_r($matches,1)));
    5. ?>


    Output:
    Array
    (
    [0] => <xml>Test</xml>
    [1] => Test
    )


    Das erste ist wie du merkst immer der gesamte matchende String. Das zweite nur die Variable. Andere Variablen erreichst du mit den weiteren Indizes.

    Lg
  • Ich bin eben auch noch auf eine einfache Lösung bekommen. Beim zweiten Blick auf deine Antwort habe ich erst die Klammern bemerkt (von denen ich vorher nichts wusste).
    Und dann kann man einfach mit deinem ersten Ausdruck in leicht abgewandelter Form auch das machen, was ich will:

    Quellcode

    1. preg_match("/<.+>(.+)<\/.+>/", $uri, $matches)
    2. echo {$matches[1]};

    Habe deinen zweiten Ausdruck jetzt nicht mehr ausprobieren können, da ich momentan unter windows bin. Aber ich vertraue dir mal, dass er seine Aufgabe auch erfüllt ;-).
    Vielen Dank für den (ungewollten) Hinweis auf die Klammern.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Deadman44 ()

  • So wie ich das sehe, matcht der Ausdruck so viel er kann ..

    das ist eigentlich das selbe Problem, wie unter BB Code Liste vor einigen Tagen. Im Prinzip läufts wieder auf die Verschachtelung heraus:

    <tag1><other_tag><tag1>inhalt</tag1></other_tag></tag1>

    Er kann nicht erkennen, dass ein Tag noch offen ist, so dass er eben mit dem ersten Tag "tag1" matcht, das er findet. Damit gibtsn Kuddelmuddel =)