J'ai quelque chose comme ça:
$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
);
Il est censé télécharger XML à partir de noms géographiques. Si print_r($xml)
je reçois:
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
)
Je fais ce que vous voyez $xml->code[0]->lat
et cela renvoie un objet. Comment puis-je obtenir la valeur?
Réponses:
Vous devez convertir un objet simpleXML en une chaîne.
la source
Vous pouvez également utiliser la méthode magique __toString ()
la source
sprintf
avec le%s
format. Ouecho
et tampon de sortie, ou ou ou ou ou ...Si vous savez que la valeur de l'élément XML est un nombre flottant (latitude, longitude, distance), vous pouvez utiliser
(float)
Aussi,
(int)
pour un nombre entier:la source
si vous ne connaissez pas la valeur de XML Element, vous pouvez utiliser
Cela fonctionne lorsque vous devez déterminer si la valeur est un nombre, car
(string)
renvoie toujours une chaîne etis_int($value)
renvoiefalse
la source
Pour moi, c'est plus facile à utiliser des tableaux que des objets,
Donc, je convertis un objet Xml,
la source
$xml['foo'][0]['bar'][0]['@attributes']['baz']
place de$xml->foo->bar['baz']
.C'est la fonction qui m'a toujours aidé à convertir les valeurs liées au xml en tableau
la source
essayer
current($xml->code[0]->lat)
il retourne l'élément sous le pointeur actuel du tableau, qui est 0, donc vous obtiendrez une valeur
la source
vous pouvez utiliser le '{}' pour accéder à votre propriété, puis vous pouvez faire ce que vous voulez. Enregistrez-le ou affichez le contenu.
D'après votre exemple, c'est le code
la source
{}
sauf s'il y a des caractères spéciaux comme des tirets.$xml->{'key'}
est juste une façon plus laide d'écrire$xml->key
.la source
echo
forces$v
deviennent une chaîne plutôt qu'un objet, tout comme le(string)$v
ferait.vous pouvez convertir un tableau avec cette fonction
la source
<0>
n'est pas une balise XML valide, donc cela ne se produira jamais. Quelques noms XML valides ne sont pas des noms PHP valides, comme<foo-bar>
, mais cela peut être géré avec la->{'foo-bar'}
syntaxe. Ou voulez-vous simplement dire accéder à l'0
élément e dans une liste d'éléments nommés similaires? C'est juste$parent->childName[0]
.la source
$codeZero = $xml->code[0]
et$lat = $xml->code[0]->lat
foreach ( $xml->code as $code ) { $lat = (string)$code->lat; echo $lat; }
Mais ce que vous parcourez ici, c'est "tous les enfants du premier<code>
élément"; ce qui n'a pas beaucoup de sens pour moi. Pour clarifier,$xml->code->children()
c'est un raccourci$xml->code[0]->children()
, pas "des enfants appeléscode
".la source