• 締切済み

XMLをツリー形式で表示

下記のような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です。

みんなの回答

  • kgbn
  • ベストアンサー率100% (1/1)
回答No.2

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

参考URL:
http://lab.aica.ac.jp/tips/tips/phpxml.html
回答No.1

<?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の方が好き。*/ ?>

関連するQ&A