KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > [SPL] SimpleXMLIterator

[SPL] SimpleXMLIterator

最近SPLを眺めていますがなかなか理解できませんw とりあえずSimpleXMLIteratorから使ってみます。

SimpleXMLIteratorを利用するとXMLの全てのノードに簡単にアクセスできます。

例えばAmazon Web ServiceでResponseGroup=Mediumとした場合のレスポンスはこんな感じになります。 このXMLから商品を配列として取得するには

PHP
  1.  <?php
  2.  class Amazon_ResposeParser
  3.  {
  4.   public function toArray($xml)
  5.   {
  6.   $arr = array();
  7.   $sxe = new SimpleXMLIterator($xml);
  8.   $sxe = $sxe->Items->Item;
  9.   $i = 0;
  10.  
  11.   for($sxe->rewind(); $sxe->valid(); $sxe->next()) {
  12.   $arr[$i] = self::getAllItem($sxe->current());
  13.   $i++;
  14.   }
  15.   return $arr;
  16.   }
  17.  
  18.   function getAllItem($sxe) {
  19.   $arr = array();
  20.   foreach($sxe as $key => $value) {
  21.   if (!$sxe->hasChildren()) {
  22.   $arr[(string) $key] = (string) $value;
  23.   } else {
  24.   $arr[(string) $key] = self::getAllItem($sxe->getChildren());
  25.   }
  26.   }
  27.   return $arr;
  28.   }
  29.  
  30.  }
  31.  
  32.  $items = Amazon_ResposeParser::toArray(file_get_contents('http://www.kantenna.com/storage/pg/sample/spl/amazon_respons.xml'));
  33.  var_dump($items);
  34.  ?>

こんな感じでOK。実行結果はこちら。 そして配列になってしまえばこっちのものです。

PHP
  1.  <?php
  2.  for ($i=0; $i<count($items); $i++) {
  3.   printf('<p><a href="%s"><img src="%s" /></a></p>',
  4.   $items[$i]['DetailPageURL'],
  5.   $items[$i]['MediumImage']['URL']
  6.   );
  7.  }
  8.  ?>

こんな感じで書くとこうなります。 いまさらながらエウレカセブンってアニメ面白そうです。GWにどこかで観賞会とかやらないかな。

本当はSimpleXMLIteratorを継承してSimpleXMLIteratorのメソッドをオーバーライドしてやるのがよい使い方なのかも。もうちょい勉強が必要そう。

パーフェクトPHP (PERFECT SERIES 3)
作者:橋口 誠 | 価格:¥ 3,780

トラックバック(1)

2011年2月24日 02:33

[SPL]SplFileInfo WEBプログラム覚書

ファイルの情報をオブジェクト指向っぽく取得したりするためのクラスSplFileInfo 続きを読む

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.10

[雑記]縦横がランダムな要素を隙間なく並べるのは無理なのか。

サイトマップ作ったんだけど、やりたかったことが出来なかった。

2012
02.08

[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて

Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。

2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24