エクセル・VBA・マクロ・JavaScript・Ajax・GoogleMaps・PHPプログラム

エクセルVBAプログラミングの基礎から応用までプログラミングの解説です。参考図書などは、広告収入で補っています。Excelをもっと使いこなしてもらえるようになったら嬉しいと思っています。
と思っていましたが、これからは2009/6/6からは、今までプログラムを作成する中でどうしても記録に残しておきたいものをメモとして残していきたいと思います。
EXCEL以外に追加したのは、JavaScript、Ajax、GoogleMaps、PHPです。みなさんにも参考になったらこの上ない喜びです。

メニューへ戻る     



PHPの小技
  P6.楽天APIでsimplexml_load_stringがうまく動かない理由


楽天APIを使って、商品検索をしてブログに簡単に登録できるようにしたいと思って、PHPでプルグラムを組んでみたけど、「simplexml_load_string」でうまく表示してくれない。

その理由は、XMLファイルのタグの中に「:」があるかららしい。

ということで、その「:」を削除するとうまく表示されるということになる。

<?xml version="1.0" encoding="UTF-8" ?>
- <Response>
- <header:Header xmlns:header="http://api.rakuten.co.jp/rws/rest/Header">
- <Args>
  <Arg key="User-Agent" value="Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727)">true</Arg>
  <Arg key="developerId" value="">true</Arg>
  <Arg key="affiliateId" value="">true</Arg>
  <Arg key="apiVersion" value="111">true</Arg>
  <Arg key="operation" value="ItemSearch">true</Arg>
  <Arg key="version" value="2007-03-28">true</Arg>
  <Arg key="imageFlag" value="0">true</Arg>
  <Arg key="keyword" value="福袋">true</Arg>
  </Args>
  <Status>Success</Status>
  <StatusMsg />
  </header:Header>
- <Body>

楽天APIのレスポンスは上のように表示される。その中(アンダーライン)に「header:Header xmlns:heade」に「:」が入っているために、「simplexml_load_string」でうまく表示してくれない。

「:」の入っている部分を削除する。
削除するプログラムが以下のとおり。
$tmp = file_get_contents($addr);
$tmp = str_replace('header:Header', 'Header', $tmp);
$tmp = str_replace('itemSearch:ItemSearch', 'ItemSearch', $tmp);
$xml = simplexml_load_string($tmp);

以下のプログラムで該当データの取り出し
foreach ($xml->Body->ItemSearch->Items->Item as $item){
//
print '<A HREF="' . $item->affiliateUrl . '" TARGET="_blank">'. $item->itemName ."</A><BR />"; print '価格:'.$item->itemPrice .'円<br>'; print '<A HREF="' . $item->affiliateUrl.'" TARGET="_blank"><IMG SRC="' . $item->smallImageUrl .'"></A><BR />'; print $item->itemCaption . '<BR /><BR />';

}

原因は名前空間になっているからか 
参考HP http://stl.blog.shinobi.jp/Entry/34/
      http://www.csfactory.jp/blog/2008/03/06/
      SimpleXMLで特定の名前空間に属する子要素を取得する
             php5でsimpleXMLを使っているのですが、名前空間の接頭辞のついた属性を取得する方法がわかりません。





メニューへ戻る
inserted by FC2 system