Переменная $ 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);
У меня проблема с этой функцией, потому что приведение текста к каждому элементу xml в массив может вызвать проблему, когда текст находится между тегами CDATA.
Я исправил это, проверив, является ли результат приведения типов в массив пустым. Если это так, то привяжите его к строке, и вы получите правильный результат.
так вот моя модифицированная версия с поддержкой cdata.
function SimpleXML2ArrayWithCDATASupport($xml){ $array = (array)$xml; if (count($array) == 0) { $array = (string)$xml; } if (is_array($array)) { //recursive Parser foreach ($array as $key => $value){ if (is_object($value)) { if(strpos(get_class($value),"SimpleXML")!==false){ $array[$key] = SimpleXML2ArrayWithCDATASupport($value); } } else { $array[$key] = SimpleXML2ArrayWithCDATASupport($value); } } } return $array; }
эта функция анализирует xml simpleXML рекурсивный рекурсивный массив
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; }