Mam coś takiego:
$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
);
Ma pobierać XML z nazw geograficznych. Jeśli to zrobię print_r($xml)
, dostanę:
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
)
Robię, jak widzisz, $xml->code[0]->lat
i zwraca obiekt. Jak mogę uzyskać wartość?
Odpowiedzi:
Musisz rzutować obiekt simpleXML na ciąg.
źródło
Możesz także użyć magicznej metody __toString ()
źródło
sprintf
w%s
formacie. Lubecho
buforowanie danych wyjściowych, lub lub lub lub ...Jeśli wiesz, że wartością elementu XML jest liczba zmiennoprzecinkowa (szerokość, długość i odległość), możesz użyć
(float)
Ponadto w
(int)
przypadku liczby całkowitej:źródło
jeśli nie znasz wartości elementu XML, możesz użyć
Działa, gdy trzeba ustalić, czy wartość jest liczbą, ponieważ
(string)
zawsze zwróci ciąg iis_int($value)
zwracafalse
źródło
Dla mnie łatwiej jest używać tablic niż obiektów,
Konwertuję obiekt Xml,
źródło
$xml['foo'][0]['bar'][0]['@attributes']['baz']
zamiast$xml->foo->bar['baz']
.Ta funkcja zawsze pomogła mi przekonwertować wartości związane z XML na tablicę
źródło
próbować
current($xml->code[0]->lat)
zwraca element pod bieżącym wskaźnikiem tablicy, który wynosi 0, więc otrzymasz wartość
źródło
możesz użyć „{}”, aby uzyskać dostęp do swojej nieruchomości, a następnie możesz zrobić, co chcesz. Zapisz lub wyświetl treść.
Z twojego przykładu jest to kod
źródło
{}
chyba że są w nim znaki specjalne, takie jak łączniki.$xml->{'key'}
to po prostu brzydszy sposób pisania$xml->key
.źródło
echo
zmusza$v
do stania się ciągiem, a nie przedmiotem, tak jak(string)$v
by to było.Za pomocą tej funkcji można przekonwertować tablicę
źródło
<0>
nie jest prawidłowym znacznikiem XML, więc nigdy by się nie zdarzyło. Kilka prawidłowych nazw XML nie jest prawidłowymi nazwami PHP, na przykład<foo-bar>
, ale można to obsłużyć za pomocą->{'foo-bar'}
składni. A może chodzi ci o dostęp do0
elementu th na liście podobnych nazwanych elementów? To jest po prostu$parent->childName[0]
.źródło
$codeZero = $xml->code[0]
i$lat = $xml->code[0]->lat
foreach ( $xml->code as $code ) { $lat = (string)$code->lat; echo $lat; }
Ale to, co zapętlasz tutaj, to „wszystkie dzieci pierwszego<code>
elementu”; co nie ma dla mnie większego sensu. Dla wyjaśnienia$xml->code->children()
jest skrótem$xml->code[0]->children()
, a nie „dzieci powołanecode
”.źródło