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のメソッドをオーバーライドしてやるのがよい使い方なのかも。もうちょい勉強が必要そう。

投稿日 2010年4月13日 04:09
カテゴリ PHP
タグ SPL | サンプルコード
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1208

コメント

コメントする
Name
Email Address
URL