php geonames timezone中的回显状态消息

gri*_*one 15 php timezone echo status-message geonames

我正在使用以下代码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." ";

}
Run Code Online (Sandbox Code Playgroud)

它工作但是对于Antartica的纬度和经度,例如它给出错误状态消息:

<status message="no timezone information found for lat/lng" value="15"/>
Run Code Online (Sandbox Code Playgroud)

如何回应这条消息?

我试试这个:

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


         }
Run Code Online (Sandbox Code Playgroud)

但是不行

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

这里有一个Antartica的var_dump():

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

您可以轻松地处理和打印此错误消息:

if ($xml->status) {
    echo 'error:' . $timezone->attributes()->message;
}
Run Code Online (Sandbox Code Playgroud)