La variable $d
provient de la fonction file_get_contents
en une URL.
$answer = @new SimpleXMLElement($d);
Ci-dessous se trouve la sortie de la print_r($answer)
:
SimpleXMLElement Object
(
[Amount] => 2698
[Status] => OK
[State] => FL
[Country] => USA
)
Comment puis-je récupérer la valeur de chaque élément et l'ajouter à un tableau? Je ne peux pas comprendre.
Le $answer
peut déjà fonctionner comme un tableau. Vous pouvez le faire si vous voulez le mettre dans un vrai tableau,
$array = array();
foreach($answer as $k => $v) {
$array[$k] = $v;
}
Dans ce cas simple, le casting fonctionnera également:
$my_array = (array)$answer
Cela devrait fonctionner:
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
J'ai un problème avec cette fonction car la conversion de chaque enfant XML dans un tableau peut poser problème lorsque le texte se situe entre des balises CDATA
.
J'ai corrigé cela en vérifiant si le résultat de la conversion de typage dans un tableau est vide. Si c'est le cas, convertissez-le en chaîne et vous obtiendrez un résultat correct.
Voici ma version modifiée avec le support CDATA
:
function SimpleXML2ArrayWithCDATASupport($xml)
{
$array = (array)$xml;
if (count($array) === 0) {
return (string)$xml;
}
foreach ($array as $key => $value) {
if (!is_object($value) || strpos(get_class($value), 'SimpleXML') === false) {
continue;
}
$array[$key] = SimpleXML2ArrayWithCDATASupport($value);
}
return $array;
}
cette fonction analyse un XML simpleXML récursif pour tableau récursif
function SimpleXML2Array($xml){
$array = (array)$xml;
//recursive Parser
foreach ($array as $key => $value){
if(strpos(get_class($value),"SimpleXML")!==false){
$array[$key] = SimpleXML2Array($value);
}
}
return $array;
}