Solarized
HOME > WEBプログラム覚書 > [SPL] SimpleXMLIterator
[SPL] SimpleXMLIterator
最近SPLを眺めていますがなかなか理解できませんw
とりあえずSimpleXMLIteratorから使ってみます。
SimpleXMLIteratorを利用するとXMLの全てのノードに簡単にアクセスできます。
例えばAmazon Web ServiceでResponseGroup=Mediumとした場合のレスポンスはこんな感じになります。
このXMLから商品を配列として取得するには
PHP
- <?php
- class Amazon_ResposeParser
- {
- public function toArray($xml)
- {
- $arr = array();
- $sxe = new SimpleXMLIterator($xml);
- $sxe = $sxe->Items->Item;
- $i = 0;
-
- for($sxe->rewind(); $sxe->valid(); $sxe->next()) {
- $arr[$i] = self::getAllItem($sxe->current());
- $i++;
- }
- return $arr;
- }
-
- function getAllItem($sxe) {
- $arr = array();
- foreach($sxe as $key => $value) {
- if (!$sxe->hasChildren()) {
- $arr[(string) $key] = (string) $value;
- } else {
- $arr[(string) $key] = self::getAllItem($sxe->getChildren());
- }
- }
- return $arr;
- }
-
- }
-
- $items = Amazon_ResposeParser::toArray(file_get_contents('http://www.kantenna.com/storage/pg/sample/spl/amazon_respons.xml'));
- var_dump($items);
- ?>
こんな感じでOK。実行結果はこちら。
そして配列になってしまえばこっちのものです。
PHP
- <?php
- for ($i=0; $i<count($items); $i++) {
- printf('<p><a href="%s"><img src="%s" /></a></p>',
- $items[$i]['DetailPageURL'],
- $items[$i]['MediumImage']['URL']
- );
- }
- ?>
こんな感じで書くとこうなります。
いまさらながらエウレカセブンってアニメ面白そうです。GWにどこかで観賞会とかやらないかな。
本当はSimpleXMLIteratorを継承してSimpleXMLIteratorのメソッドをオーバーライドしてやるのがよい使い方なのかも。もうちょい勉強が必要そう。
| 投稿日 |
2010年4月13日 04:09 |
| カテゴリ |
PHP |
| タグ |
SPL | サンプルコード |
| トラックバック URL |
http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1208 |
2011年2月24日 02:33
ファイルの情報をオブジェクト指向っぽく取得したりするためのクラスSplFileInfo 続きを読む