Saya punya sesuatu seperti ini:
$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
);
Seharusnya mengunduh XML dari geonames. Jika saya melakukannya print_r($xml)
saya mendapatkan:
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
)
Saya lakukan seperti yang Anda lihat $xml->code[0]->lat
dan mengembalikan objek. Bagaimana saya bisa mendapatkan nilainya?
Jawaban:
Anda harus melemparkan objek simpleXML ke string.
sumber
Anda juga dapat menggunakan metode ajaib __toString ()
sumber
sprintf
dengan%s
format. Atauecho
dan output buffering, atau atau atau ...Jika Anda tahu bahwa nilai elemen XML adalah angka float (lintang, bujur, jarak), Anda bisa menggunakan
(float)
Juga,
(int)
untuk bilangan bulat:sumber
jika Anda tidak tahu nilai Elemen XML, Anda bisa menggunakannya
Ini berfungsi ketika Anda perlu menentukan apakah nilai adalah angka, karena
(string)
akan selalu mengembalikan string danis_int($value)
mengembalikanfalse
sumber
Bagi saya lebih mudah menggunakan array daripada objek,
Jadi, saya mengonversi Xml-Object,
sumber
$xml['foo'][0]['bar'][0]['@attributes']['baz']
bukan$xml->foo->bar['baz']
.Ini adalah fungsi yang selalu membantu saya mengonversi nilai terkait xml ke array
sumber
mencoba
current($xml->code[0]->lat)
ia mengembalikan elemen di bawah pointer array saat ini, yaitu 0, sehingga Anda akan mendapatkan nilai
sumber
Anda dapat menggunakan '{}' untuk mengakses properti Anda, dan kemudian Anda dapat melakukan seperti yang Anda inginkan. Simpan atau tampilkan konten.
Dari contoh Anda dia adalah kode
sumber
{}
kecuali ada karakter khusus seperti tanda hubung di sana.$xml->{'key'}
hanyalah cara penulisan yang lebih jelek$xml->key
.sumber
echo
memaksa$v
untuk menjadi string daripada objek, seperti yang(string)$v
akan terjadi.Anda dapat mengonversi array dengan fungsi ini
sumber
<0>
bukan tag XML yang valid, jadi itu tidak akan pernah terjadi. Beberapa nama XML yang valid bukan nama PHP yang valid<foo-bar>
, tetapi itu dapat ditangani dengan->{'foo-bar'}
sintaks. Atau maksud Anda hanya mengakses0
elemen ke dalam daftar elemen bernama serupa? Itu baru saja$parent->childName[0]
.sumber
$codeZero = $xml->code[0]
dan$lat = $xml->code[0]->lat
foreach ( $xml->code as $code ) { $lat = (string)$code->lat; echo $lat; }
Tapi apa yang Anda putar di sini adalah "semua anak-anak dari<code>
elemen pertama "; yang tidak masuk akal bagi saya. Untuk memperjelas,$xml->code->children()
adalah singkatan$xml->code[0]->children()
, bukan "anak-anak dipanggilcode
".sumber