У меня есть что-то вроде этого:
$url = "http://ws.geonames.org/findNearbyPostalCodes?country=pl&placename=";
$url .= rawurlencode($city[$i]);
$xml = simplexml_load_file($url);
echo $url."\n";
$cityCode[] = array(
'city' => $city[$i],
'lat' => $xml->code[0]->lat,
'lng' => $xml->code[0]->lng
);
Предполагается скачать XML с геонеймов. Если print_r($xml)
я получу:
SimpleXMLElement Object
(
[code] => Array
(
[0] => SimpleXMLElement Object
(
[postalcode] => 01-935
[name] => Warszawa
[countryCode] => PL
[lat] => 52.25
[lng] => 21.0
[adminCode1] => SimpleXMLElement Object
(
)
[adminName1] => Mazowieckie
[adminCode2] => SimpleXMLElement Object
(
)
[adminName2] => Warszawa
[adminCode3] => SimpleXMLElement Object
(
)
[adminName3] => SimpleXMLElement Object
(
)
[distance] => 0.0
)
Я делаю, как вы можете видеть, $xml->code[0]->lat
и он возвращает объект. Как я могу получить значение?
Ответы:
Вы должны преобразовать объект simpleXML в строку.
источник
Вы также можете использовать магический метод __toString ()
источник
sprintf
с%s
форматом. Илиecho
и буферизация вывода, или или или или ...Если вы знаете, что значением элемента XML является число с плавающей точкой (широта, долгота, расстояние), вы можете использовать
(float)
Также
(int)
для целого числа:источник
если вы не знаете значение элемента XML, вы можете использовать
Это работает, когда вам нужно определить, является ли значение числом, потому
(string)
что всегда будет возвращать строку иis_int($value)
возвращаетfalse
источник
Для меня это проще использовать массивы, чем объекты,
Итак, я конвертирую Xml-объект,
источник
$xml['foo'][0]['bar'][0]['@attributes']['baz']
вместо$xml->foo->bar['baz']
.Это функция, которая всегда помогала мне преобразовывать значения, связанные с XML, в массив
источник
пытаться
current($xml->code[0]->lat)
он возвращает элемент под текущим указателем массива, который равен 0, поэтому вы получите значение
источник
Вы можете использовать «{}» для доступа к своей собственности, а затем можете делать все, что пожелаете. Сохраните его или отобразите содержимое.
Из вашего примера ее код
источник
{}
если там нет специальных символов, таких как дефисы.$xml->{'key'}
это просто уродливый способ написания$xml->key
.источник
echo
заставляет$v
стать строкой, а не объектом, как это(string)$v
было бы.Вы можете конвертировать массив с помощью этой функции
источник
<0>
не является допустимым тегом XML, так что это никогда не произойдет. Некоторые действительные имена XML не являются действительными именами PHP,<foo-bar>
но могут быть обработаны с помощью->{'foo-bar'}
синтаксиса. Или вы просто имеете в виду доступ к0
элементу th в списке похожих именованных элементов? Это просто$parent->childName[0]
.источник
$codeZero = $xml->code[0]
и$lat = $xml->code[0]->lat
foreach ( $xml->code as $code ) { $lat = (string)$code->lat; echo $lat; }
Но то, что вы зацикливаете здесь, это «все потомки первого<code>
элемента»; что не имеет особого смысла для меня. Чтобы уточнить,$xml->code->children()
это сокращение для$xml->code[0]->children()
, а не "дети называютcode
".источник