Ankündigung

Einklappen
Keine Ankündigung bisher.

ausgelesener XML Inhalt einer anderen Seite wird nur im Quelltext angezeigt

Einklappen

Neue Werbung 2019

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

  • ausgelesener XML Inhalt einer anderen Seite wird nur im Quelltext angezeigt

    Hallo zusammen,

    ich finde leider keine passende Lösung zu meinem Problem innerhalb dieses Forums.

    Ich habe folgendes vor:

    Ich möchte Adressen aus einer Datenbank auslesen und aus diesen Adressen einen String (url) basteln, der dann eine Seite aufruft, die einen XML Inhalt ausgibt. Diesen möchte ich dann weiter verwenden.
    Ich bin auch schon soweit, dass er die Seite richtig auflöst, abruft und ausgibt. Allerdings steht der Inhalt nicht im Browser, sondern nur im Quelltext. Auch kann ich nicht auf die jeweiligen Werte zugreifen.

    Hier einmal meine php Seite:

    PHP-Code:
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Geocoding</title>
    </head>
    <body>
    <div id="container">
        <h1>Welcome to CodeIgniter!</h1>
    <div id="body">
    <?php


    $host_name 
    'localhost';
    $user_name 'XXXXX';
    $password 'XXXXX';
    $database 'XXXXX';

    $connect mysqli_connect($host_name$user_name$password$database);

    //$abfrage = "SELECT STRASSE, PLZ, ORT FROM KUNDEN WHERE ID = '6603'"; //Abfrage mit Sonderzeichen
    $abfrage "SELECT STRASSE, PLZ, ORT FROM KUNDEN WHERE ID = '3855'"//Abfrage ohne Sonderzeichen
    $result mysqli_query($connect$abfrage);

    while(
    $dsatz mysqli_fetch_assoc($result)){
    $testfile "https://nominatim.openstreetmap.org/search/?city=" $dsatz["ORT"]. "&street=" $dsatz["STRASSE"]. "&postalcode=" $dsatz["PLZ"]. "&format=xml&limit=1";

    $testfile mb_convert_encoding($testfile'UTF-8'mb_detect_encoding($testfile'UTF-8, ISO-8859-1'true));

    $opts = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"User-Agent: lashaparesha api script\r\n"
    ));


    $context stream_context_create($opts);
    $file file_get_contents($testfilefalse$context);

    print_r($file);
    }
    ?>
        </div>
    </div>

    </body>
    </html>
    Die XML Datei sieht so aus im Quelltext:
    HTML-Code:
      <?xml version="1.0" encoding="UTF-8" ?> <searchresults timestamp='Fri, 03 Dec 21 07:42:30 +0000' attribution='Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright' querystring='Spitzbergenweg 30, Hamburg, 22145' exclude_place_ids='266848495' more_url='https://nominatim.openstreetmap.org/search//?street=Spitzbergenweg+30&amp;city=Hamburg&amp;postalcode=22145&amp;exclude_place_ids=266848495&amp;format=xml'> <place place_id='266848495' osm_type='way' osm_id='870987712' place_rank='26' address_rank='26' boundingbox="53.6292323,53.6297078,10.1659079,10.1659672" lat='53.6294379' lon='10.1659355' display_name='Spitzbergenweg, Meiendorf, Rahlstedt, Wandsbek, Hamburg, 22145, Deutschland' class='highway' type='tertiary' importance='0.43'/></searchresults>
    Zugreifen möchte ich auf die Werte "lon" und "lat" innerhalb des Tags "place".

  • #2
    Das es spezielle XML Funktionen in PHP gibt, weißt du aber schon?
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Ja das habe ich gelesen. Ich habe es zum Beispiel mit folgendem versucht:

      PHP-Code:
      $lat = new SimpleXMLElement($file);

      echo 
      $lat->place[0]->lat
      Aber ich bekomme keine Ausgabe. Aber ich bekomme ja auch noch nicht mal den kompletten Inhalt im Browser angezeigt. Ich sehe ihn lediglich im Quelltext.

      Kommentar


      • #4
        PHP-Code:
        var_dump((string)$xml->place[0]->attributes()->lat); 
        Um XML in HTML auszugeben, benutze htmlspecialchars().


        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Damit bin ich schon mal ein Stück weiter.
          Bekomme jetzt zumindest schonmal was angezeigt:
          PHP-Code:
          $file htmlspecialchars($fileENT_QUOTES);
          var_dump($file); 
          Wenn ich aber folgendes schreibe um auf ein Element zuzugreifen:
          PHP-Code:
          var_dump((string)$file->place[0]->attributes()->lat); 
          bekomme ich die Fehlermeldung:
          Trying to get property of non-object
          [

          Kommentar


          • #6
            Naja, du überschreibst ja die Variable $file mit einem String. Was hast du erwartet?

            Kommentar


            • #7
              Vielen Dank für die Richtungsweisung. Hab jetzt mein Problem gefunden und jetzt auch hoffentlich verstanden.

              Der vollständigkeit halber hier der Code den ich jetzt verwendet habe:
              PHP-Code:
              $context stream_context_create($opts);
              $file file_get_contents($testfilefalse$context);

              $xml simplexml_load_string($file);

              $lat $xml->place[0]->attributes()->lat;
              $lon $xml->place[0]->attributes()->lon

              Kommentar


              • #8
                Wäre es nicht einfacher gewesen sich die Daten gleich als JSON ausliefern zu lassen?

                Edit: Was mir soeben noch auffällt:
                PHP-Code:
                $testfile "https://nominatim.openstreetmap.org/search/?city=" $dsatz["ORT"]. "&street=" $dsatz["STRASSE"]. "&postalcode=" $dsatz["PLZ"]. "&format=xml&limit=1"
                Damit kannst du auch auf die Nase fallen wenn deine Daten bestimmte Sonderzeichen enthalten die beim Einbau in eine Query deiner URL maskiert werden müssen. Nimm für die Query die funktion http_build_query,

                PHP-Code:
                $query http_build_query([
                  
                "city" =>$dsatz["ORT"],
                  
                "street" => $dsatz["STRASSE"],
                  
                "postalcode" => $dsatz["PLZ"],
                  
                "format" => "xml",
                  
                "limit" => 1,
                ]);
                $testfile "https://nominatim.openstreetmap.org/search/?".$query
                und dies hier

                PHP-Code:
                $testfile mb_convert_encoding($testfile'UTF-8'mb_detect_encoding($testfile'UTF-8, ISO-8859-1'true)); 
                ist überflüssig da das XML mit UTF-8 daherkommt und mb_detect_encoding kein sicheres Erkennen des Encodings garantiert.

                Kommentar

                Lädt...
                X