• 締切済み

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以下のものなど、条件を絞って表示したいと思っています。できれば、プルダウンのセレクトメニューを使用して条件をしぼりたいと思っています。 どうすればいいかまったくわかりません。 サンプルを見ながら手を加えるぐらいしかできないレベルです。 よろしければ教えてください。 また、作成したプログラムは携帯でも表示できますでしょうか? セレクトメニューが携帯では表示できないことはしっていますので、チェックボタンなどを使って表示出来ればいいなと思っています。

  • Z2000
  • お礼率30% (42/138)
  • PHP
  • 回答数2
  • ありがとう数1

みんなの回答

回答No.2

#!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)
回答No.1

DOMを使いましょう。 http://jp2.php.net/manual/ja/ref.dom.php サンプルはここで聞くよりwebで漁ったほうが確実かつ豊富です。 行き詰ったら再質問するとよいでしょう。 >また、作成したプログラムは携帯でも表示できますでしょうか? outputが携帯での表示に即したものであれば大丈夫です。 ただし、各社、各端末ごとに仕様がまったく違うのはご存知だと思います。 user-agentでキチンと振り分けさえすれば問題がないかと思われます。

関連するQ&A

  • XMLデータをPOSTで送信・受信する方法

    PHP初心者です。 以下のようなXMLのデータをPOSTで送信、送信されてきたXMLデータを受信する方法がわからず行き詰っています。 フォームで以下のXMLデータをtest.phpに送ってみようと試しているのですが、valueにXMLのデータをどのようにセットすればいいのかわかりません。 そもそもこの方法が合っているのかどうかも自信がない状態です。 仕事の関係でどうしても今週中に仕上げなければならず、 大変困っています。 どなたかアドバイスをください。 よろしくお願いします。 <form action="test.php" method="post">   <input type="hidden" name="xmldata" value="">   <input type="submit" value="送信"> </form> 【test.xml】 <?xml version="1.0" encoding="UTF-8"?> <test> <sample01>あいうえお</sample01> <sample02>かきくけこ</sample02> </test>

    • 締切済み
    • PHP
  • xml

    今契約してるサーバーがSQLをつけるとものすごい金額になってしまうので。XMLに挑戦中です。 作ってみたのですが、ソースが間違ってる?のか表示できません、教えてください. name.xml <?xml version="1.0" encoding="shift-jis"?> <test no="1"> <name>test</name> <no>10</no> <tel>123-456-789</tel> </test> test.php <html> <head> <title>sample1</title> </head> <body> <?php $doc->load("name.xml"); $name = $doc->selectSingleNode("test"); $list = $name->selectNodes("*"); $no = $list->item(1); $text = " 番号 " . $no . "<br>"; print $text; ?> </body> </html>

    • ベストアンサー
    • PHP
  • XMLのHTMLへの変換 (初心者)

    例えば、以下のようなsample.xmlをWebブラウザで表示する為には どのようにするればよろしいのでしょうか。どなたか教えてください。  <?xml version="1.0" encoding="Shift_JIS" ?> - <cars> - <car> <name>乗用車</name> <price>150</price>  </car> </cars>

    • ベストアンサー
    • XML
  • PEAR XML_Query2XMLを利用したPHPからFlash(AS3)へのXMLデータの渡し方について。

    毎度お世話になっております。 前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。 FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。 しかし、その後の連結的な操作が分からず戸惑っております。 お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。 よろしくお願いします。 環境 Flash CS3(AS3) PHP5.2.6 MySQL5.1.29 Apache2.2.10 ・PHPの今のところのプログラム <?php // include required files include 'XML/Query2XML.php'; include 'MDB2.php'; try { // initialize Query2XML object $q2x = XML_Query2XML::factory(MDB2::factory('mysql://ユーザ名:パスワード@localhost/データベース名')); // generate SQL query // get results as XML $sql = "SELECT * FROM table名"; $xml = $q2x->getFlatXML($sql); // send output to browser header('Content-Type: text/xml'); $xml->formatOutput = true; echo $xml->saveXML(); } catch (Exception $e) { echo $e->getMessage(); } ?> ・AS3の今のところのプログラム System.useCodePage = true; // 外部XMLはURLLoaderで読み込む var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, completeData); myLoader.load(new URLRequest("test.xml")); // 読み込み完了後の処理 function completeData(event:Event):void { // 読み込んだ文字列をmyXMLに入れる var myXML:XML = new XML(myLoader.data); // データのnameとpriceの値をリストアップ表示 trace(myXML.drink[1].name); for (var i = 0; i < myXML.drink.length(); i++) {; //ダイナミックテキストでi番目を表示 db.text = myXML.drink[i].name trace(myXML.drink[i].name); trace(myXML.drink[i].@price); } } よろしくお願いします^^

    • ベストアンサー
    • PHP
  • xml内で条件は記述できる?

    すみません。xmlに関して質問があるのですが、 xml内において、条件文は記述することは可能なのでしょうか。 以下のようなxmlがあり、例えば9/30まではa.aspの方を有効にし、 10/1以降はb.aspを有効にするというような感じにしたいのですが。 <?xml version="1.0" encoding="UTF-8"?> <list>  <sample>   <data>    <url>/sample/a.asp</url>   </data>   <data>    <url>/sample/b.asp</url>   </data>  </sample> </list> すみませんが、よろしくお願い致します。

    • ベストアンサー
    • XML
  • VBScriptを用いたXMLのデータ抽出に関して

    下記のsample.xmlから sample.xml ---------------------------------------------- <?xml version="1.0" encoding="utf-8" ?> <books> <item> <title>XML入門-第1巻</title> <price>2500</price> <isbn>1-1234-5678-X</isbn> <authors> <author>西谷 亮</author> </authors> <imgfile>1-1234-5678-X.gif</imgfile> </item> <item> <title>XML入門-第2巻</title> <price>2200</price> <isbn>1-1234-5678-0</isbn> <authors> <author>西谷 亮</author> <author>山田 太郎</author> </authors> <imgfile>1-1234-5678-0.gif</imgfile> </item> <item> <title>XML入門-第3巻</title> <price>3600</price> <isbn>1-1234-5678-1</isbn> <authors> <author>西谷 亮</author> <author>鈴木 次郎</author> </authors> <imgfile>1-1234-5678-1.gif</imgfile> </item> </books> ---------------------------------------------- 下記のtitle.vbsを用いて、「<title>」タグに表記された 書物のタイトルだけを抜き出します。 title.vbs ---------------------------------------------- 01 : Dim objDOM, rtResult 02 : 03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument") 04 : rtResult = objDOM.load("Sample.xml") 05 : If rtResult = True Then 06 : procDispDatas objDOM.childNodes 07 : End If 08 : Set objDOM = Nothing 09 : 10 : Sub procDispDatas(objNode) 11 : Dim obj 12 : For Each obj In objNode 13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then 14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue 15 : End If 16 : If obj.hasChildNodes Then 17 : procDispDatas obj.childNodes 18 : End If 19 : Next 20 : End Sub ---------------------------------------------- 上記の記述ではサブプロシージャprocDispDatas(objNode) にて、<title>タグの要素の数だけMsgBoxでタイトル名の メッセージボックスが表示されるかと思います。 これをひとつのメッセージでまとめるて表示するはどのように 記述すればよいでしょうか。 下記のメッセージの表示が理想です。 メッセージ ---------------------------------------------- title:XML入門-第1巻 title:XML入門-第2巻 title:XML入門-第3巻 ---------------------------------------------- お手数をおかけしますが、ご存知の方 ご教授いただけませんでしょうか>< よろしくお願いいたします。

    • 締切済み
    • XML
  • XMLの相対パスの書き方

    <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <info> <element> <item>Pwd</item> <value>00000000000000</value> </element> <element> <item>Name</item> <value>MyPC</value> </element> </info> </root> こういうXMLファイルの記述があり、itemがNameであるvalueを取りたいといった場合、どういうパスを記述すればよいでしょうか? VBで動くようにしたいです。 よろしくお願いします。

    • ベストアンサー
    • XML
  • JQueryでxmlのデータを取得する。

    以下のようになっているxmlのデータがあります。 --------------------- <item> <name1>0</name1> <name2>1</name2> <name3>0</name3> </item> --------------------- <item>~</item>の中の 子ノードのタグ名とテキストデータをJQueryを使って取得したいと考えています。 上記のように、<name1><name2><name3> とタグ名がバラバラなので 配列で取得したいのですが。やり方がわかりません。 どなたかご教授ください。

    • ベストアンサー
    • AJAX
  • xml画像データを表示するphp

    xml画像データを表示するphp下記で構文エラー....解りません ご教授宜しくお願い致します。 IMAGE.XML <?xml version="1.0"?> <photos> <photo url="http://www.kahokanko.com/menu/1.jpg"/> <photo url="http://www.kahokanko.com/menu/13.jpg"/> <photo url="http://www.kahokanko.com/menu/8.jpg"/> </photos> IMAGE.PHP <?php $xml = simplexml_load_file($req) foreach($req->photos->photo as $value){ printf('<img src="%s"><br>', $value->photo->URL); }

    • 締切済み
    • PHP
  • 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には、どうやってアクセスしたら良いのでしょうね? どなたか、宜しくお願い致します。

    • ベストアンサー
    • PHP