35

URL から XML ファイルを読み取る必要があります

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

しかし、運が悪い、何か助けはありますか?

4

5 に答える 5

32

「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);
于 2012-09-22T09:17:33.200 に答える
14

コードは正しいようです。fopenラッパーが有効になっているかどうかを確認してください(allow_url_fopen = Onphp.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コードをフェッチできない場合は、リクエストにカスタムヘッダーを含める必要があるためか、 http:/で例4を呼び出すときに使用するカスタムストリームコンテキストを作成するためにstream_context_create()を使用する方法を確認してください。 /php.net/manual/en/function.file-get-contents.phpfile_get_contents()

于 2012-09-22T09:25:49.237 に答える
7

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
于 2016-04-19T02:01:23.417 に答える
1

それは私のために働いています。urlencode()の各コンポーネントで使用する必要があると思います$map_url

于 2012-09-22T09:17:28.633 に答える