dongluo1853 2018-08-08 11:41
浏览 38
已采纳

在PHP中错误提取XML

I need to extract two data from an XML file. I am using this script:

Canzone in onda:

<?php
$estrazioneAPI = new SimpleXMLElement('http://api.radionomy.com/currentsong.cfm?radiouid=0523cc62-e00c-485e-8e65-aea2aa37702a&apikey=b3ec3722-a1e6-44af-9d95-cb97ade2f4dc&callmeback=yes&type=xml&cover=yes&previous=yes.xml', NULL, TRUE);
if(false === $estrazioneAPI)
{
  echo "test";
}
$canzoni = $estrazioneAPI->xpath("//tracks");
if(count($canzoni) > 0) {
    foreach($canzoni as $track) {
        $titolo = $track->track->title;
        $artista = $track->track->artists;
        if($titolo == '' AND $artista == ''){
        echo "Nessuna canzone in onda";
        }else if($titolo == '' AND $artista != ''){
                echo "$artista - Titolo non riconosciuto";
        }else if($titolo != '' AND $artista == ''){
                echo "Artista non riconosciuto - $titolo";
            }else{
                 echo $artista . " - " . $titolo;
            }
    }
}



?>
</marquee></i>

Going to the page where I put this script works correctly, the problem is that on another page I put this to update the data every 15 seconds:

<script>
$(document).observe('dom:loaded', function() {
  new Ajax.PeriodicalUpdater('canzoneInOnda', '../api_webbo/canzone_in_onda.php', { frequency: 15 });
});
</script>
<div id="canzoneInOnda"></div>

Everything is OK except that this writing comes out from time to time:

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML

Then at the next update it returns to work normally... How could I solve?

  • 写回答

1条回答 默认 最新

  • dongqing7789 2018-08-08 13:53
    关注

    This because your returned XML is not valid. You should use try-catch and write log when an exception happens. And, we should not use SimpleXMLElement to get the url resource directly.

    <?php
    
    try {
        $url = 'http://api.radionomy.com/currentsong.cfm?radiouid=0523cc62-e00c-485e-8e65-aea2aa37702a&apikey=b3ec3722-a1e6-44af-9d95-cb97ade2f4dc&callmeback=yes&type=xml&cover=yes&previous=yes.xml';
        $ch = curl_init($url);
    
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        $result = curl_exec($ch);
        curl_close($ch);
        $estrazioneAPI = new SimpleXMLElement($result);
        //Bla bla your code...
    
    
    } catch (Throwable $exception) {
        //Write log exception
        //echo $exception->getMessage();
        //var_dump($result);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题