我正在解析 RSS 提要并有一个(子)函数,如下所示:
function nSpace($nSp, $type, $i){
$namespaces = $i->getNameSpaces(true);
$exp = explode(':', $nSp);
try{
$nameSp = $i->children($namespaces[$exp[0]]);
$item[$type] = (string)$nameSp->$exp[1];
return $item[$type];
}
catch (Exception $e) { }
}
我正在尝试检索命名空间值,并将传递常见的 RSS 提要命名空间,如“dc:date”或“content:encoded”,例如 $nSp。如果 XML 中存在命名空间,则该函数可以正常工作,但是 try{} 会在第一行中产生“未定义索引”错误,而实际上它不存在。
就我个人而言,我宁愿运行isset($i->children($namespaces[$exp[0]])){}
检查而不是 try/catch,因为我更熟悉该工作流程,但这不起作用(出现“无法使用返回值”错误)。
几个问题:
- try{} 不应该不会产生错误消息吗?
- 尝试/捕捉是最好的方法吗?
- 有没有办法用 if() 来代替?
谢谢。
更新:这是此功能的(缩写)调用/用法:
$rawFeed = file_get_contents($url);
try { $rss = new SimpleXMLElement($rawFeed); } catch (Exception $e) { }
foreach ($rss->channel->item as $i) {
$item['link'] = isset($i->link) ? (string)$i->link : nSpace('dc:link', 'link', $i);
$item['dateRaw'] = isset($i->pubDate) ? (string)$i->pubDate : nSpace('dc:date', 'date', $i);
// etc...
}