- 締切済み
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です。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kgbn
- ベストアンサー率100% (1/1)
simpleXMLを使用して、簡単に実装できます。 下記のURLを参照してください。 dlの形式になったら 後はCSSで調整するのがBESTかと思われます。
- himajin100000
- ベストアンサー率54% (1660/3060)
<?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の方が好き。*/ ?>