仕事でデータ量の多いXMLファイルをCSVに変換する必要があったのでちょっと調べて作ってみた。
動作環境はPHP 5.0.4 OSX10.4です。
<?php $str= <<<DATA <?xml version="1.0"?> <root> <parentnode ID="1" NAME="大カテゴリ"> <node ID="1" NAME="中カテゴリ"> <node ID="1" NAME="小カテゴリ"> <hoge ID="2" NAME="さとう"/> <hoge ID="3" NAME="sakana"/> <hoge ID="4" NAME="sato"/> <hoge ID="5" NAME="skn"/> </node> </node> </parentnode> </root> DATA; // ↓これがみそ。 $root = simplexml_load_string($str); foreach($root->parentnode[0]->node as $node){ foreach($node->node as $subnode){ foreach($subnode->hoge as $hoge){ echo $root->parentnode[0]['NAME'] .",".$node['ID'] .",".$node['NAME'] .",".$subnode['NAME'] .",".$hoge['ID'] .",".$hoge['NAME']."\n"; } } } ?>
出力結果: 大カテゴリ,1,中カテゴリ,小カテゴリ,2,さとう 大カテゴリ,1,中カテゴリ,小カテゴリ,3,sakana 大カテゴリ,1,中カテゴリ,小カテゴリ,4,sato 大カテゴリ,1,中カテゴリ,小カテゴリ,5,skn
たったこれだけでXMLをパースできるとは。
うーむ。素晴らしい。
今日からPHP5推進派になりました。