プロが教える店舗&オフィスのセキュリティ対策術

下記のようなXMLをツリー形式(?)でリスト表示するにはどうすれば良いのでしょうか。

(XML)
<crop>
  <name>りんご</name>
 <vegf>
  <name>くだもの</name>
 </vegf>
</crop>
<crop>
  <name>さくらんぼ</name>
 <vegf>
  <name>くだもの</name>
 </vegf>
</crop>
<crop>
  <name>にんじん</name>
 <vegf>
  <name>やさい</name>
 </vegf>
</crop>
<crop>
  <name>かぼちゃ</name>
 <vegf>
  <name>やさい</name>
 </vegf>
</crop>

↑をこんな風↓に表示させたいです。

(リスト)
■くだもの
┣りんご
┗さくらんぼ

■やさい
┣にんじん
┗かぼちゃ


$xml = simplexml_load_file("crop.xml");

foreach ($xml->crop as $crop) {
echo $crop->name ;
}

ここまで書いてみましたが"vegfが同じものをまとめる"ことができなくて
挫折してしまいました…。
どなたかご教授ください。よろしくおねがいします。
環境はPHP Version 5.2.10です。

A 回答 (2件)

simpleXMLを使用して、簡単に実装できます。


下記のURLを参照してください。
dlの形式になったら
後はCSSで調整するのがBESTかと思われます。

参考URL:http://lab.aica.ac.jp/tips/tips/phpxml.html
    • good
    • 0

<?php



header("Content-Type:text/plain");
$xml = simplexml_load_file("Q5388120-1.xml");
$nodes = $xml->xpath("/crops/crop[count(self::crop[preceding-sibling::crop/vegf/name = ./vegf/name]) = 0 ] ");

foreach ($nodes as $node) {
print("■" . (string)$node->vegf->name . "\n");
foreach ($xml->crop as $crop) {
if((string)$crop->vegf->name == (string)$node->vegf->name){
print(" ●" . (string)$crop->name . "\n");
}
}
}

/* 本当はXSLTやXQueryの方が好き。*/
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!