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 |
コメント