15

タイムゾーンを取得するために、次のコード php を使用しています。

$url = 'http://api.geonames.org/timezone?lat=' . $latitude . '&lng=' . $longitude . '&username=demo';
        $xml = simplexml_load_file($url);

        foreach($xml->children() as $timezone)
        {


            echo "TimezoneId: ".$timezone->timezoneId." ";
            echo "DstOffset : ".$timezone->dstOffset." ";
            echo "GmtOffset : ".$timezone->gmtOffset." ";

}

動作しますが、たとえば南極大陸の緯度と経度の場合、エラーステータスメッセージが表示されます:

<status message="no timezone information found for lat/lng" value="15"/>

このメッセージをエコーする方法は?

私はこれを試しています:

if ($xml->status) {
    echo "error: ".$timezone->status['message']. "";


         }

しかし、動作しません

4

2 に答える 2

9

存在しないオブジェクトから要素を取得しようとしています。このような XML 要素には、countryCode、countryName、dstOffset、gmtOffset などの属性といくつかの値があります。var_dump() を使用すると、エラー メッセージが配列であるこれらの属性にあることがわかります。

ここにあなたの例があります:

問題のない場所での var_dump():

object(SimpleXMLElement)#4 (12) {
  ["@attributes"]=>
  array(1) {
    ["tzversion"]=>
    string(11) "tzdata2014i"
  }
  ["countryCode"]=>
  string(2) "KG"
  ["countryName"]=>
  string(10) "Kyrgyzstan"
  ["lat"]=>
  string(7) "40.4246"
  ["lng"]=>
  string(7) "74.0021"
  ["timezoneId"]=>
  string(12) "Asia/Bishkek"
  ["dstOffset"]=>
  string(3) "6.0"
  ["gmtOffset"]=>
  string(3) "6.0"
  ["rawOffset"]=>
  string(3) "6.0"
  ["time"]=>
  string(16) "2015-07-09 19:53"
  ["sunrise"]=>
  string(16) "2015-07-09 05:41"
  ["sunset"]=>
  string(16) "2015-07-09 20:36"
}

そして、南極大陸の var_dump() は次のとおりです。

object(SimpleXMLElement)#4 (1) {
  ["@attributes"]=>
  array(2) {
    ["message"]=>
    string(41) "no timezone information found for lat/lng"
    ["value"]=>
    string(2) "15"
  }
}

次のように、このエラー メッセージを簡単に処理して出力できます。

if ($xml->status) {
    echo 'error:' . $timezone->attributes()->message;
}
于 2015-07-09T13:59:05.373 に答える
2

これを試して、

<?php
$url = 'http://api.geonames.org/timezone?lat=' . $latitude . '&lng=' . $longitude . '&username=demo';
$xml = simplexml_load_file($url);
foreach ($xml->geoname as $o_location){
printf(
    'Name %s<br>
    lat is %s<br>
    lon is %s<br>
    geonameId is %s<br>
    countryCode is %s<br>
    countryName is %s<br>
    fcl is %s<br>
    fcode is %<br>
    ',
    $o_location->name,
    $o_location->lat,
    $o_location->lng,
    $o_location->geonameId,
    $o_location->countryCode,
    $o_location->countryName,
    $o_location->fcl,
    $o_location->fcode
);
}
?>
于 2015-07-15T18:44:55.540 に答える