ヤフオクAPIでレスポンスフィールドに返ってこないノードがある場合どのように処理すれば良いのでしょうか?
実例を上げると「/ResultSet/Result/Item/Option/FreeshippingIcon」は送料無料アイコンのURLが格納されているのですが、このOption以下のノードは必ずしもあるわけではありません。
例)
<Item>
〜省略〜
<Option>
<FreeShippingIcon>
http://i.yimg.jp/images/auct/template/ui/auc_mod/ic_free_shipping.png
</FreeShippingIcon>
</Option>
〜省略〜
</Item>
<Item>
〜省略〜
<Option>
</Option>
〜省略〜
</Item>
現在foreachで取得し、FreeShippingIconに文字列が入っていれば、「送料無料」と表示したいのですが、上記の通り「/ResultSet/Result/Item/Option/FreeshippingIcon」があったりなかったりする為がうまく行きません。
そこで、ノード「FreeShippingIcon」があるかないかで判断したい(ノード「FreeShippingIcon」があれば送料無料)のですがどのように書けばよいでしょうか?
ちなみに現状は以下です。
foreach ($result->Result->Item as $item) {
$arr[] = array(
'price' => floor($item->CurrentPrice),
'title' => convert($item->Title),
'shipping' => convert($item->Option->FreeshippingIcon) != '' ? '送料無料' : ''
);
}
FreeshippingIcon 要素の存在確認は、isset() を使います。
<?php ... 'shipping' => isset($item->Option->FreeshippingIcon) ? '送料無料' : ''
他にも、empty() や count() 、SimpleXMLElement::xpath メソッドを使う方法なんかも。
http://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exists