Ответ 1
Вы пытаетесь получить элемент из объекта, которого не существует. В таком элементе 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() Antartica:
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;
}