2010-12-03 131 views
2

我遇到了问题处理错误,而我的php中的simplexml_load_file。我试图解析fox_sports xml,并将日期存储在我的数据库中。我的代码如下所示:“simplexml_load_file”中的错误处理

$foxs_url_breaking_news = 'http://feeds.news.com.au/public/rss/2.0/fs_breaking_news_13.xml'; 
    $foxs_xml_breaking_news = simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA); 
    foreach($foxs_xml_breaking_news->channel[0]->item as $item) 
    { 
     $date = date('Y-m-d H:i:s',strtotime($item->pubDate)); 
     $news->insert(array('source' => 'foxsports', 
          'headline' => addslashes($item->title), 
          'timestamp' => $date, 
          'description' => addslashes($item->description), 
          'category' => 'Breaking News', 
          'link' => addslashes($item->link)));    
    } 

我的代码工作正常。但问题是我想把它作为一个长期的解决方案。所以我需要一些错误处理: 1.如果xml的链接不再可用。 2.如果simplexml_load_file无法从链接加载xml文件。 3.如果simplexml_load_file无法加载xml,那么不应该执行foreach,因为它会给“为foreach()提供的无效参数”)

或者如果您认为我需要处理其他事情为了使它成为一个永久的解决方案,也请让我知道。

回答

2

两件事是帮我解决我的问题:

$foxs_url_breaking_news = 'http://feeds.news.com.au/public/rss/2.0/fs_breaking_news_13.xml'; 
$foxs_xml_breaking_news = @simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA); 
if(@simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA)) 
{ 
    foreach($foxs_xml_breaking_news->channel[0]->item as $item) 
    { 
     $date = date('Y-m-d H:i:s',strtotime($item->pubDate)); 
     $news->insert(array('source' => 'foxsports', 
          'headline' => addslashes($item->title), 
          'timestamp' => $date, 
          'description' => addslashes($item->description), 
          'category' => 'Breaking News', 
          'link' => addslashes($item->link)));    
    } 
} 

所以:我在使用simplexml_load_file前面使用@避免的情况下,错误信息是无法加载文件 而第二:在我的IF语句中,我有整个“@simplexml_load_file($ foxs_url_breaking_news,'SimpleXMLElement',LIBXML_NOCDATA)”,而不是$ foxs_xml_breaking_news。我没有一个想法,为什么这个工作,而不是当我在我的IF $ foxs_xml_breaking_news没有工作。

我甚至尝试如果($ foxs_xml_breaking_news === FALSE),但即使这不适合我。

2

该函数在失败时返回false,因此在循环之前检查$foxs_xml_breaking_news是否为假。

$foxs_xml_breaking_news = @simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA); 
if($foxs_xml_breaking_new === false) 
{ 
    //cannot fetch file 
} 
else 
{ 
    // foreach loop... 
} 
+0

谢谢,这可以完成,但我仍然会收到一个错误“simplexml_load_file($ foxs_url_breaking_news”,链接已损坏,或者simplexml_load_file无法加载xml。我该如何处理这个问题。 – 2010-12-03 21:40:39

+0

将一个在函数调用之前`@`我会更新我的答案 – 2010-12-03 21:42:03