- 締切済み
php xml 読み込んで 一部のみ表示する
こんにちは。 今回php画面でxmlを読み込むんですけど、XMLファイルにいくつかのテスト問題があって、一問ずつ表示したいです。どうすれば良いのか、教えて頂けませんでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yyr446
- ベストアンサー率65% (870/1330)
(続き) SimpleXML 関数を使いxpathも使うと <?php $file = "quiz.xml"; if (file_exists($file)) { $xml = simplexml_load_file($file); $quizs = $xml->xpath('/data/quiz'); foreach($quizs as $quiz){ list($no)=$quiz->xpath('@no'); list($question)=$quiz->xpath('question/text()'); list($answer)=$quiz->xpath('answer/text()'); print "問題: " . $no . " " . $question . "<br />"; print "答え " . $answer. "<br />"; } } else { exit('XML 入力をオープンできませんでした'); } ?> これだけで、出来ます。詳細はphpのマニュアルで調べて下さい。 ご参考になれば幸いです。 PHPだけでは、これの応用はめんどうそうです。 javascriptと組み合わせて実用的なのを作って下さい。
- yyr446
- ベストアンサー率65% (870/1330)
(続き) SimpleXML 関数を使うと <?php $file = "quiz.xml"; if (file_exists($file)) { $xml = simplexml_load_file($file); foreach ($xml->children() as $quiz) { print "<br />問題:" . $quiz->attributes() . " "; foreach ($quiz->children() as $question) { if ($question->getName()=="question"){ print $question[0]; } if ($question->getName()=="answer"){ print "<br />答え " . $question[0]; } } } } else { exit('XML 入力をオープンできませんでした'); } ?> となり、xpathも使うとさらに...
- yyr446
- ベストアンサー率65% (870/1330)
こんなquizのxml(quiz.xml)があったとして、 <?xml version="1.0" encoding="utf-8"?> <data> <quiz no="1"> <question>食べられないパンは?</question> <answer>フライパン</answer> </quiz> <quiz no="2"> <question>たこの入れ歯って何?</question> <answer>タバコ</answer> </quiz> </data> これをPHPのXML関数で処理すると <?php $file = "quiz.xml"; $xml_parser = xml_parser_create("utf-8"); xml_parser_set_option ($xml_parser,XML_OPTION_CASE_FOLDING,1); xml_set_element_handler($xml_parser,"startElement","endElement"); xml_set_character_data_handler($xml_parser, "dataget"); if (!($fp = fopen($file, "r"))) { die("XML 入力をオープンできませんでした"); } while ($data = fread($fp, 4096)) { xml_parse($xml_parser, $data, feof($fp)); } xml_parser_free($xml_parser); function dataget($parser, $text){ global $tagname; if($tagname=="QUESTION" or $tagname=="ANSWER"){ print $text; } } function startElement($parser, $name,$attrs){ global $tagname; $tagname = $name; if ($name =="QUIZ"){ print "<br />問題:" . $attrs['NO'] . " "; } } function endElement($parser, $name) { if ($name=="QUESTION"){ print "<br />答え"; } } ?> で、出来ます。 SimpleXML 関数を使うともっと簡単になる