Я вызываю метод PHP cURL на сервере, а ответ – это тип XML. cURL сохраняет результат (после удаления тегов) в переменной скалярного типа. Есть ли способ сохранить его в объекте / хеше / массиве, чтобы его было легко разобрать?
<?php function download_page($path){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$path); curl_setopt($ch, CURLOPT_FAILONERROR,1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $retValue = curl_exec($ch); curl_close($ch); return $retValue; } $sXML = download_page('http://alanstorm.com/atom'); $oXML = new SimpleXMLElement($sXML); foreach($oXML->entry as $oEntry){ echo $oEntry->title . "\n"; }
Просто добавьте header('Content-type: application/xml');
перед вашим эхом ответа XML, и вы увидите страницу XML.
Нет, CURL не имеет ничего с разбором XML, он ничего не знает о возвращенном содержимом. он служит прокси для получения контента. это зависит от вас, что с этим делать.
используйте JSON, если возможно (и json_decode) – с ними проще работать, если это невозможно, использовать любую XML-библиотеку для парсина, такую как DOMXML: http://php.net/domxml
Пример:
<songs> <song dateplayed="2011-07-24 19:40:26"> <title>I left my heart on Europa</title> <artist>Ship of Nomads</artist> </song> <song dateplayed="2011-07-24 19:27:42"> <title>Oh Ganymede</title> <artist>Beefachanga</artist> </song> <song dateplayed="2011-07-24 19:23:50"> <title>Kallichore</title> <artist>Jewitt K. Sheppard</artist> </song>
тогда:
<?php $mysongs = simplexml_load_file('songs.xml'); echo $mysongs->song[0]->artist; ?>
Вывод в вашем браузере: Корабль кочевников
кредиты: http://blog.teamtreehouse.com/how-to-parse-xml-with-php5
$sXML = download_page('http://alanstorm.com/atom'); // Comment This // $oXML = new SimpleXMLElement($sXML); // foreach($oXML->entry as $oEntry){ // echo $oEntry->title . "\n"; // } // Use json encode $xml = simplexml_load_string($sXML); $json = json_encode($xml); $arr = json_decode($json,true); print_r($arr);
простой загружаемый файл xml ..
$xml = @simplexml_load_string($retValuet); $status = (string)$xml->Status; $operator_trans_id = (string)$xml->OPID; $trns_id = (string)$xml->TID;
?>