当我循环遍历xml php时,记录丢失了

时间:2013-07-23 07:37:37

标签: php xml simplexml

如果这是重复的道歉,我看到其他类似的问题,但我不能让我的工作。

我有这个XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<quizzes>
<quiz>
<title>Arithmetic quiz</title>
<description>
<text>Seeing how mathematical quiz works</text>
</description>

<grading>
<range start="0" end="49">
<grade>F</grade>
<rank/>
</range>
<range start="50" end="60">
<grade>D</grade>
<rank/>
</range>
<range start="60" end="69">
<grade>C</grade>
<rank/>
</range>
<range start="70" end="79">
<grade>B</grade>
<rank/>
</range>
<range start="80" end="100">
<grade>A</grade>
<rank/>
</range>
</grading>

<question type="">
<text>Select the correct value for the common difference:2,6,10,14,18,22</text>
<option>
<text>26</text>
<score>5</score>
<explanation>
<text>Correct!</text>
</explanation>
</option>

<option>
<text>18</text>
<score>0</score>
<explanation>
<text>Incorrect!</text>
</explanation>
</option>

<option>
<text>10</text>
<score>0</score>
<explanation>
<text>Incorrect!</text>
</explanation>
</option>
</question>

</quiz>
</quizzes>

我能够循环并获得'得分'元素,但除了'小测验'之外我没有得到任何其他信息。

我的代码如下所示:

$xml=simplexml_load_file("maths.xml");
echo $xml->getName() . "<br>";

foreach($xml->children() as $child)
   {
   echo $child->getName() . ": " . $child . "<br>";
   }

有人能指出我正确的方向吗?我认为我没有足够深入地遍历XML树,但我不知道如何实现这一点。

1 个答案:

答案 0 :(得分:0)

您可以使用xpath()

$xml=simplexml_load_file('math.xml');
var_dump($xml->xpath('//score'));

//score将选择所有<score>元素,无论它们在xml树中的位置如何。我已经为您撰写了一篇关于简单xml的初学者文章:link

另一种方法是使用DOMDocument

$doc = new DOMDocument();
$doc->load('math.xml');

foreach($doc->getElementsByTagName('score') as $element) {
    echo $element->nodeValue;
}

教程:link