0

我正在解析 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,因为我更熟悉该工作流程,但这不起作用(出现“无法使用返回值”错误)。

几个问题:

  1. try{} 不应该不会产生错误消息吗?
  2. 尝试/捕捉是最好的方法吗?
  3. 有没有办法用 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...
}
4

0 回答 0