仕事でデータ量の多い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推進派になりました。