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) {  }
}

名前空間の値を取得しようとしており、"dc:date" や "content:encoded" などの一般的な RSS フィードの名前空間を $nSp として渡します。名前空間が XML に存在する場合、関数は正常に動作しますが、そうでない場合、try{} は最初の行で「未定義のインデックス」エラーを生成します。

個人的には、try/catch の代わりにチェックを実行したいisset($i->children($namespaces[$exp[0]])){}のですが、そのワークフローに慣れているため、これは機能しません (「戻り値を使用できません」というエラーが発生します)。

いくつかの質問:

  1. try{} でエラー メッセージが生成されないようにする必要がありますか?
  2. try/catch が最善の方法ですか?
  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