重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんにちは。
 今回php画面でxmlを読み込むんですけど、XMLファイルにいくつかのテスト問題があって、一問ずつ表示したいです。どうすれば良いのか、教えて頂けませんでしょうか。

A 回答 (3件)

(続き)


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と組み合わせて実用的なのを作って下さい。

参考URL:http://www.php.net/manual/ja/ref.simplexml.php
    • good
    • 0

(続き)


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も使うとさらに...
    • good
    • 0

こんな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 関数を使うともっと簡単になる
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!