可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have something like this:
$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
);
It\'s supposed to download XML from geonames. If I do print_r($xml)
I get :
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
)
I do as you can see $xml->code[0]->lat
and it returns an object. How can i get the value?
回答1:
You have to cast simpleXML Object to a string.
$value = (string) $xml->code[0]->lat;
回答2:
You can also use the magic method __toString()
$xml->code[0]->lat->__toString()
回答3:
If you know that the value of the XML element is a float number (latitude, longitude, distance), you can use (float)
$value = (float) $xml->code[0]->lat;
Also, (int)
for integer number:
$value = (int) $xml->code[0]->distance;
回答4:
For me its easier to use arrays than objects,
So, I convert an Xml-Object,
$xml = simplexml_load_file(\'xml_file.xml\');
$json_string = json_encode($xml);
$result_array = json_decode($json_string, TRUE);
回答5:
if you don\'t know the value of XML Element, you can use
$value = (string) $xml->code[0]->lat;
if (ctype_digit($value)) {
// the value is probably an integer because consists only of digits
}
It works when you need to determine if value is a number, because (string)
will always return string and is_int($value)
returns false
回答6:
you can use the \'{}\' to access you property, and then you can do as you wish.
Save it or display the content.
$varName = $xml->{\'key\'};
From your example her\'s the code
$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\'];
....
}
}
回答7:
This is the function that has always helped me convert the xml related values to array
function _xml2array ( $xmlObject, $out = array () ){
foreach ( (array) $xmlObject as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? _xml2array ( $node ) : $node;
return $out;
}
回答8:
try current($xml->code[0]->lat)
it returns element under current pointer of array, which is 0, so you will get value
回答9:
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/>\';
}
回答10:
you can convert array with this function
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;
}
回答11:
$codeZero = null;
foreach ($xml->code->children() as $child) {
$codeZero = $child;
}
$lat = null;
foreach ($codeZero->children() as $child) {
if (isset($child->lat)) {
$lat = $child->lat;
}
}
回答12:
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);