2012-09-22 8 views
22

Ich habe zu lesen, eine XML-Datei von einer URLwie XML-Datei von URL mit PHP

$map_url = "http://maps.google.com/maps/api/directions/xml?origin=".$merchant_address_url."&destination=".$customer_address_url."&sensor=false"; 

Das gibt mir eine URL wie zu lesen:

http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false

I verwende diese Funktion, um Daten zu lesen und dann zu erhalten:

$response_xml_data = file_get_contents($map_url); 
if($response_xml_data){ 
    echo "read"; 
} 

$data = simplexml_load_string($response_xml_data); 
echo "<pre>"; print_r($data); exit; 

Aber kein Glück, keine Hilfe?

Antwort

1

Es funktioniert für mich. Ich denke, Sie müssen wahrscheinlich urlencode() auf jeder der Komponenten von $map_url verwenden.

13

können Sie die Daten aus dem XML mithilfe der Funktion "simplexml_load_file" abrufen. Bitte lesen Sie diesen Link

http://php.net/manual/en/function.simplexml-load-file.php

$url = "http://maps.google.com/maps/api/directions/xml?origin=Quentin+Road+Brooklyn%2C+New+York%2C+11234+United+States&destination=550+Madison+Avenue+New+York%2C+New+York%2C+10001+United+States&sensor=false"; 
$xml = simplexml_load_file($url); 
print_r($xml); 
+0

ja habe ich versucht simplexml_load_file aber wenn ich print_r dann gibt es mir leere Seite –

+0

Achten Sie darauf, in der php.ini eingeschaltet allow_url_fopen haben –

+0

i auf –

13

Ihr Code richtig erscheint, prüfen Sie, ob Sie fopen wrappers aktiviert (allow_url_fopen = On auf php.ini) haben

auch, wie von anderen Antworten erwähnt, sollten Sie ein zur Verfügung stellen richtig codierte URI oder codieren sie mit urlencode() Funktion. Sie sollten auch prüfen, ob es einen Fehler, den XML-String holen und wenn es irgendein Parsing-Fehler, die Sie Ausgabe libxml_get_errors() verwenden, können wie folgt:

<?php 
if (($response_xml_data = file_get_contents($map_url))===false){ 
    echo "Error fetching XML\n"; 
} else { 
    libxml_use_internal_errors(true); 
    $data = simplexml_load_string($response_xml_data); 
    if (!$data) { 
     echo "Error loading XML\n"; 
     foreach(libxml_get_errors() as $error) { 
      echo "\t", $error->message; 
     } 
    } else { 
     print_r($data); 
    } 
} 
?> 

Wenn Sie das Problem ist, kann den XML-Code vielleicht nicht holen es ist, weil Sie einige benutzerdefinierten Header in Ihrer Anfrage enthalten müssen, zu überprüfen, wie stream_context_create() verwenden, um einen benutzerdefinierten Stream Kontext für die Verwendung zu erstellen, wenn file_get_contents() am Beispiel 4 bei http://php.net/manual/en/function.file-get-contents.php

+0

allow_url_fopen geprüft allow_url_fopen auf –

+0

ist, wenn ich den Code über diesen geben „Fehler verwendet Laden von XML \ n "nur keine andere Nachricht –

+0

dann muss das Problem mit' file_get_contents ($ map_url) 'sein. Wenn Ihr URI gültig ist und allow_url_fopen auf On gesetzt ist, müssen Sie möglicherweise einen benutzerdefinierten Kontext beim Aufruf der Funktion ... – NotGaeL

4

file_get_contents in der Regel Berechtigungsprobleme Aufruf hat. Um sie zu vermeiden, verwenden Sie:

function get_xml_from_url($url){ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 

    $xmlstr = curl_exec($ch); 
    curl_close($ch); 

    return $xmlstr; 
} 

Beispiel:

$xmlstr = get_xml_from_url('http://www.camara.gov.br/SitCamaraWS/Deputados.asmx/ObterDeputados'); 
$xmlobj = new SimpleXMLElement($xmlstr); 
$xmlobj = (array)$xmlobj;//optional 
0

$url = 'http://www.example.com'; $xml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);

$ url kann PHP-Datei sein, solange die Datei XML-Format Daten als Ausgabe erzeugen.