2012-09-22 26 views
22

tengo que leer un archivo XML desde una dirección URLcómo leer el archivo XML de la URL utilizando php

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

Esto me da una URL como:

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 Estoy usando esta función para leer y luego obtener datos:

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

Pero no hubo suerte, ¿alguna ayuda?

Respuesta

1

Me funciona. Creo que probablemente necesite usar urlencode() en cada uno de los componentes de $map_url.

13

puede obtener los datos del XML utilizando la función "simplexml_load_file". Por favor, consulte este enlace

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í Traté simplexml_load_file pero cuando print_r entonces me da la página en blanco –

+0

Asegúrese de que ha activado la allow_url_fopen en su php.ini –

+0

he comprobado allow_url_fopen en –

13

Su código parece correcto, comprobar si tiene habilitado fopen wrappers (allow_url_fopen = On en php.ini)

Además, como se ha mencionado en otras respuestas, debe proporcionar una URI codificado correctamente o codificarlo usando la función urlencode(). También debe comprobar si hay algún error al obtener la cadena XML y si hay algún error de análisis, que se puede utilizar la salida libxml_get_errors() de la siguiente manera:

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

Si el problema es que no se puede recuperar el código XML tal vez es porque es necesario incluir algunos encabezados personalizados en su solicitud, comprobar cómo utilizar stream_context_create() para crear un contexto de secuencia personalizado para su uso cuando se llama a file_get_contents() en el ejemplo 4 en http://php.net/manual/en/function.file-get-contents.php

+0

allow_url_fopen está en –

+0

cuando he utilizado el código por encima de este dar "Error cargando XML \ n "solo no hay ningún otro mensaje –

+0

, entonces el problema debe ser con' file_get_contents ($ map_url) '. Si su URI es válido y allow_url_fopen está activado, es posible que necesite proporcionar un contexto personalizado al llamar a la función ... – NotGaeL

4

file_get_contents por lo general tiene problemas de permisos. Para evitarlos, utilice:

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

Ejemplo:

$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 puede ser archivo PHP, siempre y cuando el archivo de generar datos XML como formato de salida.

Cuestiones relacionadas