【PHP5.2.0のSimpleXML関数】を使って、

AmazonWebサービスから受け取ったXML文書を表示させようとしていますが、
ユニークでない要素にアクセスして繰り返し表示する方法を教えてください。
<br>
<br>
<a href="http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=0QRPDEYA3S34NHGWRRG2&Version=2007-01-15&Operation=ItemLookup&ItemId=4344004299&ResponseGroup=Reviews,ItemAttributes,SalesRank,OfferFull&MerchantId=All&Condition=All">AmazonWebサービスから取得した$XML</a>を、
<br>
$obj = simplexml_load_string($xml) or exit("エラー");
<br>
として単一の要素、例えば
<br>
echo 'ASIN:' . $obj->Items->Item->ASIN .'&lt;br&gt';
<br>
はちゃんと表示されるんですが、
複数あるOffer要素の中身を繰り返し表示させようと、
<br>
foreach($obj->xpath('//Offer') as $Offer){
echo $Offer->Seller->SellerId .'&lt;br&gt';
echo $Offer->OfferAttributes->Condition .'&lt;br&gt';
echo $Offer->OfferListing->Price->Amount .'&lt;br&gt&lt;br&gt';
{
<br>
としても、
Parse error: parse error, unexpected $end in F:\app\xampp\htdocs\isbn.php on line 234
というエラーがでてしまいます。line 234 は、/body,/HTMLタグの直後で空行です。

よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2007/02/10 12:13:20
  • 終了:2007/02/10 15:38:52

ベストアンサー

id:bonlife No.2

回答回数421ベストアンサー獲得回数752007/02/10 15:21:22

ポイント500pt

$objの中身をvar_dump()やprint_r()で確認していただければ分かると思いますが、simplexml_load_stringの結果はXMLではなく配列になっています。

XPathでの情報検索はできません。

foreach ( $obj->Items->Item->Offers->Offer as $offer ) {
    echo $offer->Seller->SellerId . "<br />";
    echo $offer->OfferAttributes->Condition . "<br />";
    echo $offer->OfferListing->Price->Amount . "<br />";
}

上記のように取得すれば良いはずです。

勉強目的でしたら、このやり方でも構わないと思いますが、本格的に活用する予定でしたらPEAR::Services_Amazonを使った方が良いと思います。

参考になれば幸いです。

id:renpon

ご教示いただいた構文で、動きました。

初心者には敷居が高そうですが、

PEAR::Services_Amazonも活用できるように

なれるよう頑張ろうと思います。

本当にありがとうございました。

2007/02/10 15:37:34

その他の回答(1件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752007/02/10 12:59:01

ポイント35pt

上記に引用されている最後のbrタグの直前のcurly bracketの向きが間違っていませんか。

curly bracketの記述ミスで起こるエラーです。

あるいは、php.iniなどの設定でshort_open_tagをoffにしているのにスクリプト中で使っている、ということはありませんか。

id:renpon

回答ありがとうございます。

curly bracketの向きを訂正しました。

エラー表示は出なくなりましたが、foreachでの繰り返し処理の部分が何も表示されません。

ユニークな要素については問題なく表示されます。また、Offにしているshort_open_tagは使っていません。よろしくお願いいたします。

2007/02/10 14:42:37
id:bonlife No.2

回答回数421ベストアンサー獲得回数752007/02/10 15:21:22ここでベストアンサー

ポイント500pt

$objの中身をvar_dump()やprint_r()で確認していただければ分かると思いますが、simplexml_load_stringの結果はXMLではなく配列になっています。

XPathでの情報検索はできません。

foreach ( $obj->Items->Item->Offers->Offer as $offer ) {
    echo $offer->Seller->SellerId . "<br />";
    echo $offer->OfferAttributes->Condition . "<br />";
    echo $offer->OfferListing->Price->Amount . "<br />";
}

上記のように取得すれば良いはずです。

勉強目的でしたら、このやり方でも構わないと思いますが、本格的に活用する予定でしたらPEAR::Services_Amazonを使った方が良いと思います。

参考になれば幸いです。

id:renpon

ご教示いただいた構文で、動きました。

初心者には敷居が高そうですが、

PEAR::Services_Amazonも活用できるように

なれるよう頑張ろうと思います。

本当にありがとうございました。

2007/02/10 15:37:34
  • id:bonlife
    沢山のポイントをくださり、ありがとうございました。

    PEARは初心者の方にもそれほど難しくないと思いますよ。
    (私も初心者ですが、特に問題なく使えています。)

    特にServicesで始まるものは、データへのアクセスがより直感的に行えるように工夫されていますので、便利に使えると思います。
    Googleなどで検索すれば、紹介している日本語のサイトも沢山あります。
    一度調べてみてはいかがでしょうか。
  • id:renpon
    PEARも調べてみたいと思います。
    ご丁寧にありがとうございます。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません