首页 > 解决方案 > 在 PHP 中提取 XML 时出错

问题描述

我需要从 XML 文件中提取两个数据。我正在使用这个脚本:

昂达中的Canzone:

<?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>

转到我放置此脚本的页面正常工作,问题是在另一个页面上我将其放置为每 15 秒更新一次数据:

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

一切都很好,只是不时出现以下文字:

致命错误:未捕获的异常“异常”,消息“字符串无法解析为 XML”

然后在下一次更新时它恢复正常工作......我该如何解决?

标签: phpjqueryxml

解决方案


这是因为您返回的 XML 无效。try-catch当发生异常时,您应该使用和写入日志。而且,我们不应该使用SimpleXMLElement直接获取 url 资源。

<?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);
}

推荐阅读