PHP5でxml文書をパースする方法
<?xml version="1.0"?>
<root>
<items>
<item>
<id>1</id>
<name>商品(赤)</name>
<price>1500</price>
<color>red</color>
<size>8</size>
<option>A</option>
</item>
<item>
<id>2</id>
<name>商品(青)</name>
<price>700</price>
<color>blue</color>
<size>3</size>
</item>
<item>
<id>3</id>
<name>商品(緑)</name>
<price>1200</price>
<color>green</color>
<size>5</size>
<option>C</option>
</item>
</items>
</root>
上記のようなXMLデータをPHPでパースし、
1つずつ、配列に入れていきたいと考えていますが、
問題なのは、
上から2番目の商品(青)には、<option>データが無いということです。
これは、この<option>が、オプションが有る時にだけ存在するタグだからです。
//-----------------------------
<?php
$doc->load($url); //上記xmlデータのあるURL:$url
$array = array();
$i = 1;
while($i <= 3){ //実際には、もっと商品数はあります。ここでは例として、3。
//配列の初期化
$item_array = array();
$items = $doc->getElementsByTagName('id');
$item_array['id'] = $items->item($i)->nodeValue;
$items = $doc->getElementsByTagName('name');
$item_array['name'] = $items->item($i)->nodeValue;
//*
//*同様のコードが続く
//*
$items = $doc->getElementsByTagName('option');
$item_array['option'] = $items->item($i)->nodeValue;
//*
//*同様のコードが続く
//*
//商品データが詰まった配列を、さらに配列に入れる
$array[] = $item_array;
}
//全ての商品のデータが詰まった配列を表示する。
print_r($array);
?>
//-----------------------------
このようなことがしたいわけです。
なお、タグ名を$tag_array = array('id','name',,,,,'option',,,)として、
foreach($tag_array as $tag){
$items = $doc->getElementsByTagName($tag);
$item_array[$tag] = $items->item($i)->nodeValue;
}
という風にした方が冗長ではないかとは思いますが、
それは、まぁ横に置いておきまして、
このコードで問題なのは、<option>が途中、つまり2番目で抜けると、
3番目の<option>データが、2番目の商品の<option>データとして配列に入ってしまうことです。
上から順に詰めて、配列に格納されてしまい、困っている、ということです。
<option>データが無い場合は、「ナシ」とでもしておきたいのですが、
どうしたら良いでしょうか?
<item>を1つずつ
$items = $doc->getElementsByTagName('item');
で取得して、
各<item>の中の、<option>にアクセスする、なんて方法があるとベストなのですが、
そんな方法はありますでしょうか?
firstChildですと、<item>の場合、<id>になってしまうため、<option>にはアクセスできません。
firstChild以降のChildには、どうやってアクセスしたら良いのでしょうね?
どなたか、宜しくお願い致します。
お礼
早速ありがとうございます。 >質問文にあるURL先でもすごく小さいですが厚み9ミリとわかります わたしが乗せたURLの楽天のシルビアは9mmなんですか? 再度確認の質問ですみません。