如何使用php从url读取xml文件

Asi*_*hhh 30 php xml url

我必须从URL读取XML文件

$map_url = "http://maps.google.com/maps/api/directions/xml?origin=".$merchant_address_url."&destination=".$customer_address_url."&sensor=false";
Run Code Online (Sandbox Code Playgroud)

这给了我一个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 +新+纽约%2C + 10001名+美国和传感器= 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; 
Run Code Online (Sandbox Code Playgroud)

但没有运气,任何帮助?

小智 26

您可以使用"simplexml_load_file"函数从XML获取数据.请参阅此链接

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);
Run Code Online (Sandbox Code Playgroud)


Not*_*aeL 14

你的代码似乎是正确的,检查你是否启用了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);
   }
}
?>
Run Code Online (Sandbox Code Playgroud)

如果问题是您无法获取XML代码,可能是因为您需要在请求中包含一些自定义标头,请检查如何使用stream_context_create()创建自定义流上下文,以便file_get_contents()http:/上调用示例4时使用/php.net/manual/en/function.file-get-contents.php


Dog*_*las 5

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;
}
Run Code Online (Sandbox Code Playgroud)

例:

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


Bre*_*mir 1

它对我有用。我认为您可能需要urlencode()使用$map_url.