php - simplexml_load_file - Obtener valor del objeto SimpleXMLElement
simplexmlelement to array php (12)
Esta es la función que siempre me ha ayudado a convertir los valores relacionados con xml en una matriz
function _xml2array ( $xmlObject, $out = array () ){
foreach ( (array) $xmlObject as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? _xml2array ( $node ) : $node;
return $out;
}
Tengo algo como esto:
$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
);
Se supone que descarga XML de geonames. Si print_r($xml)
obtengo:
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
)
Hago lo que puede ver $xml->code[0]->lat
y devuelve un objeto. ¿Cómo puedo obtener el valor?
Para mí, es más fácil usar matrices que objetos,
Entonces, convierto un objeto Xml,
$xml = simplexml_load_file(''xml_file.xml'');
$json_string = json_encode($xml);
$result_array = json_decode($json_string, TRUE);
Si sabe que el valor del elemento XML es un número flotante (latitud, longitud, distancia), puede usar (float)
$value = (float) $xml->code[0]->lat;
Además, (int)
para número entero:
$value = (int) $xml->code[0]->distance;
También puedes usar el método mágico __toString ()
$xml->code[0]->lat->__toString()
Tienes que convertir el objeto SimpleXML a una cadena.
$value = (string) $xml->code[0]->lat;
puede usar ''{}'' para acceder a su propiedad, y luego puede hacer lo que desee. Guárdalo o muestra el contenido.
$varName = $xml->{''key''};
De tu ejemplo, ella es el código
$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''];
....
}
}
puedes convertir array con esta función
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;
}
si no conoce el valor de XML Element, puede usar
$value = (string) $xml->code[0]->lat;
if (ctype_digit($value)) {
// the value is probably an integer because consists only of digits
}
Funciona cuando necesita determinar si el valor es un número, porque (string)
siempre devolverá cadena y is_int($value)
devuelve false
try current($xml->code[0]->lat)
devuelve un elemento bajo el puntero actual de la matriz, que es 0, por lo que obtendrá un valor
$codeZero = null;
foreach ($xml->code->children() as $child) {
$codeZero = $child;
}
$lat = null;
foreach ($codeZero->children() as $child) {
if (isset($child->lat)) {
$lat = $child->lat;
}
}
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);
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/>'';
}