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 .'<br>';
<br>
はちゃんと表示されるんですが、
複数あるOffer要素の中身を繰り返し表示させようと、
<br>
foreach($obj->xpath('//Offer') as $Offer){
echo $Offer->Seller->SellerId .'<br>';
echo $Offer->OfferAttributes->Condition .'<br>';
echo $Offer->OfferListing->Price->Amount .'<br><br>';
{
<br>
としても、
Parse error: parse error, unexpected $end in F:\app\xampp\htdocs\isbn.php on line 234
というエラーがでてしまいます。line 234 は、/body,/HTMLタグの直後で空行です。
よろしくお願いいたします。
$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を使った方が良いと思います。
参考になれば幸いです。
上記に引用されている最後のbrタグの直前のcurly bracketの向きが間違っていませんか。
curly bracketの記述ミスで起こるエラーです。
あるいは、php.iniなどの設定でshort_open_tagをoffにしているのにスクリプト中で使っている、ということはありませんか。
PEARは初心者の方にもそれほど難しくないと思いますよ。
(私も初心者ですが、特に問題なく使えています。)
特にServicesで始まるものは、データへのアクセスがより直感的に行えるように工夫されていますので、便利に使えると思います。
Googleなどで検索すれば、紹介している日本語のサイトも沢山あります。
一度調べてみてはいかがでしょうか。
ご丁寧にありがとうございます。