変数_$d
_は_file_get_contents
_関数からURLに渡されます。
_$answer = @new SimpleXMLElement($d);
_
以下はprint_r($answer)
の出力です:
_SimpleXMLElement Object
(
[Amount] => 2698
[Status] => OK
[State] => FL
[Country] => USA
)
_
各要素の値を取得して配列に追加するにはどうすればよいですか?わかりません。
$answer
はすでに配列として機能できます。実際の配列に入れたい場合は、これを行うことができます。
$array = array();
foreach($answer as $k => $v) {
$array[$k] = $v;
}
この単純なケースでは、型キャストも機能します。
$my_array = (array)$answer
これはうまくいくはずです:
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
テキストがCDATA
タグの間にある場合、すべてのXML子を配列に型キャストすると問題が発生する可能性があるため、この関数に問題があります。
これを修正するには、配列への型キャストの結果が空かどうかを確認します。もしそうなら、それを文字列に型キャストすると、適切な結果が得られます。
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;
}
この関数は、XML単純XML再帰を解析して配列再帰にします
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;
}