- 締切済み
xmlのデータを条件を絞って表示する
PHPでxmlのデータを条件を絞って表示したいと思っています。 xmlデータをPHPで作成し、結果表示するというのはサンプルを参考に作成できたのですが、条件の絞り方がわからず困っています。 <?php $xmlstr = <<<XML <?xml version="1.0" encoding="UTF-8" standalone='yes'?> <item> <name>牛肉</name> <value>ヒレ</value> <price>500</price> </item> <item> <name>豚肉</name> <value>ヒレ</value> <price>400</price> </item> <item> <name>豚肉</name> <value>もも</value> <price>300</price> </item> <item> <name>鶏肉</name> <value>もも</value> <price>200</price> </item> ・・・・・・ ・・・ XML; ?> というデータを 例えば<value>が(もも)に当てはまるものだけや、 <price>が400以下のものなど、条件を絞って表示したいと思っています。できれば、プルダウンのセレクトメニューを使用して条件をしぼりたいと思っています。 どうすればいいかまったくわかりません。 サンプルを見ながら手を加えるぐらいしかできないレベルです。 よろしければ教えてください。 また、作成したプログラムは携帯でも表示できますでしょうか? セレクトメニューが携帯では表示できないことはしっていますので、チェックボタンなどを使って表示出来ればいいなと思っています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- himajin100000
- ベストアンサー率54% (1660/3060)
#!C:/Environment/PHP/v5.2.4/php-cgi.exe <?php /* Apache + PHP を使うのが初めてだったりして インストールに一時間半くらい手間取った(汗 */ /* 動かないと思ったら,そもそも XMLが間違ってんじゃねーか!(怒) */ $xmlstr = <<< XML <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <items> <item> <name>牛肉</name> <value>ヒレ</value> <price>500</price> </item> <item> <name>豚肉</name> <value>ヒレ</value> <price>400</price> </item> <item> <name>豚肉</name> <value>もも</value> <price>300</price> </item> <item> <name>鶏肉</name> <value>もも</value> <price>200</price> </item> </items> XML; $doc = new DOMDocument(); $doc -> loadXML($xmlstr); $xpath = new DOMXPath($doc); $query = "/items/item/name[text() = '豚肉']"; /* 折角だから,XPathを利用してみました。name要素の子がテキストノードで,その内容が「豚肉」であるノードのリスト */ $NodeList = $xpath->evaluate($query,$doc); header("Content-Type:text/plain;charset=UTF-8\n\n"); for($i = 0;$i < $NodeList->length ;$i++){ /* foreachとか使えそうだと思うけど,よくわからなかった(汗 */ print $NodeList->item($i)->textContent . "\n" ; }; /* 個人的にはXSLTを使うほうが好きになれそう。でも調べる気力が湧かない */ ?>
- wp_
- ベストアンサー率54% (132/242)
DOMを使いましょう。 http://jp2.php.net/manual/ja/ref.dom.php サンプルはここで聞くよりwebで漁ったほうが確実かつ豊富です。 行き詰ったら再質問するとよいでしょう。 >また、作成したプログラムは携帯でも表示できますでしょうか? outputが携帯での表示に即したものであれば大丈夫です。 ただし、各社、各端末ごとに仕様がまったく違うのはご存知だと思います。 user-agentでキチンと振り分けさえすれば問題がないかと思われます。