Подтвердить что ты не робот

Как читать xml файл с URL-адреса, используя php

Мне нужно прочитать XML файл из URL

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

Это дает мне 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

Я использую эту функцию для чтения и получения данных:

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

Но не повезло, какая помощь?

4b9b3361

Ответ 1

вы можете получить данные из XML с помощью функции "simplexml_load_file". Пожалуйста, обратитесь к этой ссылке

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

Ответ 2

Ваш код кажется правильным, проверьте, включено ли обертки fopen (allow_url_fopen = On на php.ini)

Кроме того, как упоминалось в других ответах, вы должны предоставить правильно закодированный URI или закодировать его с помощью функции urlencode(). Вы также должны проверить, есть ли ошибка в получении строки XML, и если есть какая-либо ошибка синтаксического анализа, которую вы можете вывести с помощью libxml_get_errors() следующим образом:

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

Если проблема в том, что вы не можете получить XML-код, возможно, потому, что вам нужно включить в свой запрос некоторые пользовательские заголовки, проверить, как использовать stream_context_create() для создания настраиваемого контекста потока для использования при вызове file_get_contents() на примере 4 в http://php.net/manual/en/function.file-get-contents.php

Ответ 3

file_get_contents() обычно имеет проблемы с разрешениями. Чтобы избежать их, используйте:

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

Пример:

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

Ответ 4

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

$url может быть php файлом, если файл генерирует данные формата XML в качестве вывода.

Ответ 5

Он работает для меня. Я думаю, вам, вероятно, нужно использовать urlencode() для каждого из компонентов $map_url.