Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match mit html-tags innerhalb XML-Datei funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • preg_match mit html-tags innerhalb XML-Datei funktioniert nicht

    Hallo zusammen,

    ich möchte aus einer Wikipedia-Seite den ersten Absatz auslesen und verwende dazu den curl-Befehl. Aus der eingelesenen Seite möchte ich den Text rausfiltern, der sich zwischen <p> und </p> befindet. Das funktioniert aber leider nicht.

    Folgenden Code benutze ich derzeit:

    Code:
     $ch = curl_init('https://de.wikipedia.org/w/api.php?format=xml&action=query&prop=extracts&exintro=1&titles=Charles,_Prince_of_Wales');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $absatz = curl_exec($ch);
    // laut echo-Befehl ist die Variable $absatz korrekt befüllt
    
    preg_match('/(.*?)<p>(.*?)<\/p>/', $absatz, $test);
    echo $test[2];
    Mit diesem Code findet keinerlei Ausgabe statt. Wenn ich nun allerdings die <p>-tags außen vor lasse und beispielsweise stattdessen als pattern reinen Text eingebe, wie bspw. 'Arthur' und 'Thronfolger', dann wird mir der Text dazwischen korrekt ausgegeben.

    Oder wenn ich statt der per curl erzeugten Variable $absatz einfach die o.g. Wikipedia-API-Seite direkt aufrufe und dort den Text in die Zwischenablage kopiere und ihn dann manuell als Text in die Variable einfüge, wird mir der gewünschte Inhalt auch korrekt ausgegeben.

    Also scheint es irgendwie mit der Auslesung des xml-Dokumentes zusammenzuhängen?

    Ich würde mich freuen, wenn mir jemand einen Tipp geben könnte

    Vielen Dank im voraus!

    Andreas

  • #2
    Du bekommst XML zurück, also solltest du auch mit einem XML-Parser arbeiten und nicht mit preg_match() herummurksen.

    Kommentar


    • #3
      Ah, ok! Könntest du mir einen Tipp geben, wie ich ungefähr vorgehen müsste?

      Kommentar


      • #4
        Also ich würde den XML-Content mit DOMDocument laden und dann mit DOMXpath den gewünschten Inhalt herausfiltern.

        Kommentar


        • #5
          Alles klar, danke, ich versuche das mal.

          Kommentar


          • #6
            Besonders hilfreich ist https://www.php-rocks.de/thema/74-ei...-domxpath.html durchzulesen.
            Und im Forum nach xpath suchen, da gibt es viele Beispiele dazu.

            Kommentar


            • #7
              PHP-Code:
              $json file_get_contents('https://de.wikipedia.org/w/api.php?' http_build_query([
                  
              'format' => 'json',
                  
              'action' => 'query',
                  
              'prop' => 'extracts',
                  
              'exintro' => 1,
                  
              'titles' => 'Charles,_Prince_of_Wales'
              ]));

              $data json_decode($json);
              foreach(
              $data->query->pages as $id => $page) {
                  
              var_dump($page->extract);

              Kommentar


              • #8
                @protestix: total interessanter Artikel, der mir für die Zukunft viel nützen wird

                @Blar: der Code funktioniert perfekt!

                Vielen Dank für die tollen Infos

                Kommentar

                Lädt...
                X