Ich habe so etwas:
$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
);
Es soll XML von Geonamen herunterladen. Wenn ich das print_r($xml)
bekomme, bekomme ich:
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
)
Ich mache, wie Sie sehen können, $xml->code[0]->lat
und es gibt ein Objekt zurück. Wie kann ich den Wert erhalten?
Antworten:
Sie müssen simpleXML Object in eine Zeichenfolge umwandeln.
quelle
Sie können auch die magische Methode __toString () verwenden
quelle
sprintf
mit dem%s
Format. Oderecho
und Ausgabepufferung, oder oder oder oder ...Wenn Sie wissen, dass der Wert des XML-Elements eine Gleitkommazahl (Breite, Länge, Entfernung) ist, können Sie verwenden
(float)
Auch
(int)
für die Ganzzahl:quelle
Wenn Sie den Wert von XML Element nicht kennen, können Sie ihn verwenden
Es funktioniert, wenn Sie feststellen müssen, ob der Wert eine Zahl ist, da
(string)
immer eine Zeichenfolge zurückgegeben undis_int($value)
zurückgegeben wirdfalse
quelle
Für mich ist es einfacher, Arrays als Objekte zu verwenden.
Also konvertiere ich ein XML-Objekt,
quelle
$xml['foo'][0]['bar'][0]['@attributes']['baz']
stattdessen schreiben können$xml->foo->bar['baz']
.Dies ist die Funktion, die mir immer geholfen hat, die XML-bezogenen Werte in ein Array zu konvertieren
quelle
Versuchen
current($xml->code[0]->lat)
Es gibt ein Element unter dem aktuellen Zeiger des Arrays zurück, der 0 ist, sodass Sie einen Wert erhalten
quelle
Sie können das '{}' verwenden, um auf Ihr Eigentum zuzugreifen, und dann können Sie tun, was Sie möchten. Speichern Sie es oder zeigen Sie den Inhalt an.
Aus Ihrem Beispiel ist sie der Code
quelle
{}
sei denn, es gibt Sonderzeichen wie Bindestriche.$xml->{'key'}
ist nur eine hässlichere Art zu schreiben$xml->key
.quelle
echo
Kräfte$v
eher zu einer Zeichenfolge als zu einem Objekt werden müssen, genau wie(string)$v
dies der Fall wäre.Mit dieser Funktion können Sie ein Array konvertieren
quelle
<0>
ist kein gültiges XML-Tag, das würde also niemals passieren. Einige gültige XML-Namen sind keine gültigen PHP-Namen<foo-bar>
, aber das kann mit->{'foo-bar'}
Syntax behandelt werden. Oder meinen Sie einfach den Zugriff auf das0
th-Element in einer Liste ähnlich benannter Elemente? Das ist nur so$parent->childName[0]
.quelle
$codeZero = $xml->code[0]
und$lat = $xml->code[0]->lat
foreach ( $xml->code as $code ) { $lat = (string)$code->lat; echo $lat; }
Aber was Sie hier durchlaufen, sind "alle Kinder des ersten<code>
Elements"; Das macht für mich nicht viel Sinn. Zu verdeutlichen,$xml->code->children()
ist Abkürzung für$xml->code[0]->children()
, nicht "Kinder genanntcode
".quelle