我有这样的事情:
$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
);
它应该从geonames下载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
并返回一个对象。我怎样才能获得价值?
答案 0 :(得分:401)
您必须将simpleXML Object强制转换为字符串。
$value = (string) $xml->code[0]->lat;
答案 1 :(得分:81)
您还可以使用魔术方法__toString()
$xml->code[0]->lat->__toString()
答案 2 :(得分:16)
如果您知道XML元素的值是浮点数(纬度,经度,距离),则可以使用(float)
$value = (float) $xml->code[0]->lat;
此外,(int)
表示整数:
$value = (int) $xml->code[0]->distance;
答案 3 :(得分:12)
如果您不知道XML元素的值,则可以使用
$value = (string) $xml->code[0]->lat;
if (ctype_digit($value)) {
// the value is probably an integer because consists only of digits
}
当您需要确定值是否为数字时,它会起作用,因为(string)
将始终返回字符串,而is_int($value)
将返回false
答案 4 :(得分:12)
对我来说,它比对象更容易使用数组,
所以,我转换了一个Xml-Object,
$xml = simplexml_load_file('xml_file.xml');
$json_string = json_encode($xml);
$result_array = json_decode($json_string, TRUE);
答案 5 :(得分:2)
您可以使用“{}”访问您的媒体资源,然后就可以按照自己的意愿进行操作。 保存或显示内容。
$varName = $xml->{'key'};
从你的例子中,她是代码
$filePath = __DIR__ . 'Your path ';
$fileName = 'YourFilename.xml';
if (file_exists($filePath . $fileName)) {
$xml = simplexml_load_file($filePath . $fileName);
$mainNode = $xml->{'code'};
$cityArray = array();
foreach ($mainNode as $key => $data) {
$cityArray[..] = $mainNode[$key]['cityCode'];
....
}
}
答案 6 :(得分:1)
这个函数总是帮助我将xml相关值转换为数组
function _xml2array ( $xmlObject, $out = array () ){
foreach ( (array) $xmlObject as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? _xml2array ( $node ) : $node;
return $out;
}
答案 7 :(得分:1)
尝试current($xml->code[0]->lat)
它返回当前数组指针下的元素,即0,因此你将得到值
答案 8 :(得分:0)
header("Content-Type: text/html; charset=utf8");
$url = simplexml_load_file("http://URI.com");
foreach ($url->PRODUCT as $product) {
foreach($urun->attributes() as $k => $v) {
echo $k." : ".$v.' <br />';
}
echo '<hr/>';
}
答案 9 :(得分:0)
您可以使用此功能转换数组
function xml2array($xml){
$arr = array();
foreach ($xml->children() as $r)
{
$t = array();
if(count($r->children()) == 0)
{
$arr[$r->getName()] = strval($r);
}
else
{
$arr[$r->getName()][] = xml2array($r);
}
}
return $arr;
}
答案 10 :(得分:0)
$codeZero = null;
foreach ($xml->code->children() as $child) {
$codeZero = $child;
}
$lat = null;
foreach ($codeZero->children() as $child) {
if (isset($child->lat)) {
$lat = $child->lat;
}
}
答案 11 :(得分:-2)
foreach($xml->code as $vals )
{
unset($geonames);
$vals=(array)$vals;
foreach($vals as $key => $value)
{
$value=(array)$value;
$geonames[$key]=$value[0];
}
}
print_r($geonames);