2012-09-22 67 views
22

devo leggere un file XML da un URLcome leggere file XML dal url usando php

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

Questo mi dà un URL del tipo:

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 Sto usando questa funzione per leggere e quindi ottenere dati:

$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; 

Ma nessuna fortuna, qualche aiuto?

risposta

1

Funziona per me. Penso che probabilmente devi usare urlencode() su ciascuno dei componenti di $map_url.

13

è possibile ottenere i dati dall'XML utilizzando la funzione "simplexml_load_file". Si prega di fare riferimento questo 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

sì ho provato simplexml_load_file ma quando ho print_r poi mi dà la pagina in bianco –

+0

Assicurarsi di avere allow_url_fopen attivato nel tuo php.ini –

+0

ho controllato allow_url_fopen su –

13

Il tuo codice sembra giusto, controllare se si dispone fopen wrappers abilitato (allow_url_fopen = On su php.ini)

Inoltre, come detto da altre risposte, è necessario fornire un URI correttamente codificato o codificarlo utilizzando la funzione urlencode(). Si dovrebbe anche controllare se c'è qualche errore durante il recupero la stringa XML e se c'è qualche errore di analisi, che è possibile utilizzare l'uscita libxml_get_errors() come segue:

<?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); 
    } 
} 
?> 

Se il problema è che non si può recuperare il codice XML forse è perché è necessario includere alcune intestazioni personalizzate a richiesta, verificare come utilizzare stream_context_create() per creare un contesto flusso personalizzato da utilizzare quando si chiama il file_get_contents() esempio 4 a http://php.net/manual/en/function.file-get-contents.php

+0

allow_url_fopen è in –

+0

quando ho usato il codice di sopra di questo danno "Errore caricamento di XML \ n "solo nessun altro messaggio –

+0

quindi il problema deve essere con' file_get_contents ($ map_url) '. Se l'URI è valido e allow_url_fopen è attivo, potrebbe essere necessario fornire un contesto personalizzato quando si chiama la funzione ... – NotGaeL

4

file_get_contents solito ha problemi di autorizzazione. Per evitarli, utilizzare:

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; 
} 

Esempio:

$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 può essere un file php, a condizione che il file di generare dati di formato XML come output.