simplexmlelement simplexml_load_file read new leer ejemplo con atributos array php simplexml

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/>''; }