PHPによるxmlのパースに関して質問です、


ヤフオク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) != '' ? '送料無料' : ''
);
}

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/07/23 01:21:53
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

ポイント100pt

FreeshippingIcon 要素の存在確認は、isset() を使います。

<?php
    ...
    'shipping' => isset($item->Option->FreeshippingIcon) ? '送料無料' : ''

他にも、empty() や count() 、SimpleXMLElement::xpath メソッドを使う方法なんかも。
http://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exists

id:finnapple

うまくいきました!ありがとうございます。

2015/07/23 01:22:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません