私は 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]])){}
のですが、そのワークフローに慣れているため、これは機能しません (「戻り値を使用できません」というエラーが発生します)。
いくつかの質問:
- try{} でエラー メッセージが生成されないようにする必要がありますか?
- try/catch が最善の方法ですか?
- 代わりに 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...
}