如何在PHP中加载XML文档?

时间:2014-04-19 06:26:24

标签: php xml

请检查我的代码。

questions.php

<?php
include("db.php");

$dom = new DOMDocument("1.0");
$node = $dom->createElement("questions");
$parnode = $dom->appendChild($node); 

$week = date("W");
$query = "SELECT * FROM ".QUIZ_QUESTION." WHERE week='".$week."'";  
$result = mysql_query($query);

header("Content-type:  application/xml; charset=ISO-8859-1"); 

while ($row = mysql_fetch_assoc($result)){  
  $node = $dom->createElement("question");  
  $question = $parnode->appendChild($node); 
  $ansAtrribute = $question->setAttribute("id",$row['id']);

  $que = $dom->createElement("que",$row['question']);
  $quenode = $question->appendChild($que);

  $qryOpt = mysql_query("SELECT * FROM ".QUIZ_OPTION." WHERE question_id='".$row['id']."'");
  while($gerOptions = mysql_fetch_array($qryOpt)){
  $ans = $dom->createElement("ans",$gerOptions['option']);
  $ansNode = $question->appendChild($ans);
  $ansAtrribute = $ansNode->setAttribute("ans",$gerOptions['is_correct']);
  }
} 
echo $dom->saveXML();
?>

我直接运行questions.php这里是XML输出:

输出:

-<questions>
  -<question id="1">
    <que>What is PHP?</que>
    <ans ans="0">Fruit</ans>
    <ans ans="1">Language</ans>
    <ans ans="0">Game</ans>
  </question>
</questions>

quiz.php

<?php
    $xmlDoc = new DOMDocument("1.0");
    $xmlDoc->load("questions.php");

    $questions = $xmlDoc->getElementsByTagName("question");
    $question= $questions->item($qnum)->getElementsByTagName("que")->item(0)->nodeValue;
    $ans1= $questions->item($qnum)->getElementsByTagName("ans")->item(0)->nodeValue;
    $ans1r= $questions->item($qnum)->getElementsByTagName("ans")->item(0)->getAttribute('ans');
    $ans2= $questions->item($qnum)->getElementsByTagName("ans")->item(1)->nodeValue;
    $ans2r= $questions->item($qnum)->getElementsByTagName("ans")->item(1)->getAttribute('ans');
    $ans3= $questions->item($qnum)->getElementsByTagName("ans")->item(2)->nodeValue;
    $ans3r= $questions->item($qnum)->getElementsByTagName("ans")->item(2)->getAttribute('ans');
?>

我正在运行quiz.php,但questions.php未加载。

我收到以下错误:

  

警告:DOMDocument :: load()[domdocument.load]:期望开始标记,'&lt;'在文件中找不到:/// G:/xampp/htdocs/txtweb/quiz/questions.php,第3行的G:\ xampp \ htdocs \ txtweb \ quiz \ quiz.php中的第30行

     

致命错误:在第6行的G:\ xampp \ htdocs \ txtweb \ quiz \ quiz.php中的非对象上调用成员函数getElementsByTagName()

我发布了我的完整代码。请告诉我代码的错误在哪里?

2 个答案:

答案 0 :(得分:4)

执行

$xmlDoc->load("questions.php");

你自己加载PHP源文件,而不是渲染输出。您的Web服务器负责解释和执行PHP文件,然后计算结果(在这种情况下将是生成的XML文件)。

要获取XML文件,您必须使用HTTP请求,例如

$xmlDoc->load("http://YOURURL/questions.php");

应该有效。当然,您必须将YOURURL替换为您的实际URL和脚本路径。

答案 1 :(得分:0)

在php文件的顶部使用libxml_use_internal_errors(TRUE);,即像这样的quiz.php

<?php
    libxml_use_internal_errors(TRUE);
    $xmlDoc = new DOMDocument();
    $xmlDoc->load("questions.php");

这会删除不必要的内部警告。

并使用此更新您的xml文件 -

    <rdf:RDF>
    -<questions>
      -<question id="1">
        <que>What is PHP?</que>
        <ans ans="0">Fruit</ans>
        <ans ans="1">Language</ans>
        <ans ans="0">Game</ans>
      </question>
    </questions>
  </rdf:RDF>