我有一个包含不规则子节点数量的XML文件,并希望显示问题和子节点。问题的显示是正确的,但我仍然坚持正确显示子节点。
<Survey>
<Question ID="1">
<QuestionText>Question Number 1</SurveyQuestionText>
<AnswerText>Answer 1</SurveyAnswerText>
<AnswerText>Answer 2</SurveyAnswerText>
<AnswerText>Answer 3</SurveyAnswerText>
<AnswerText>Answer 4</SurveyAnswerText>
<AnswerText>Answer 5</SurveyAnswerText>
</Question>
<Question ID="2">
<QuestionText>Question Number 2</SurveyQuestionText>
<AnswerText>Answer 1</SurveyAnswerText>
<AnswerText>Answer 2</SurveyAnswerText>
<AnswerText>Answer 3</SurveyAnswerText>
</Question>
<Question ID="3">
<QuestionText>Question Number 3</SurveyQuestionText>
<AnswerText>Answer 1</SurveyAnswerText>
<AnswerText>Answer 2</SurveyAnswerText>
<AnswerText>Answer 3</SurveyAnswerText>
<AnswerText>Answer 4</SurveyAnswerText>
</Question>
</Survey>
到目前为止,这是我的代码
$xml_url = "questions.xml";
$xml = simplexml_load_file($xml_url);
$x = 1;
foreach($xml->children() as $question) {
echo $x . ".) " . $question->QuestionText . "\n";
$numAnswers = $question->AnswerText->count();
echo "count: " . $numAnswers . "\n";
//insert code for display AnswerText
$x++;
}
到目前为止,这是我的输出:
1.) Question Number 1
count: 5
2.) Question Number 2
count: 3
3.) Question Number 3
count: 4
答案 0 :(得分:2)
只需为答案添加第二个内部foreach:
foreach($xml->children() as $question) {
echo $x . ".) " . $question->QuestionText . "\n";
$numAnswers = $question->AnswerText->count();
echo "count: " . $numAnswers . "\n";
//insert code for display AnswerText
foreach($question->AnswerText as $answers)
echo $answer;
$x++;
}
SimpleXML拥有非常有用的访问机制。例如,Iterator,在这里使用。
在此处阅读所有内容:http://www.php.net/manual/en/simplexml.examples-basic.php
答案 1 :(得分:1)
我不确定我是否误解了这个问题,但是为了循环答案,你只需要一个嵌套的foreach
循环:
$question_number = 1;
foreach($xml->children() as $question) {
echo $question_number . ".) " . $question->QuestionText . "\n";
$numAnswers = $question->AnswerText->count();
echo "count: " . $numAnswers . "\n";
$answer_number = 1;
foreach ( $question->children() as $answer_text ) {
echo " " . $answer_number . ".)" . $answer_text . "\n";
$answer_number++;
}
$question_number++;
}
或者,如the Basic SimpleXML Usage manual page所示,您可以循环使用具有特定名称的孩子,这样可以更明显地发生了什么:
foreach ( $xml->Question as $question ) {
// ...
echo $question->QuestionText;
// ...
foreach ( $question->AnswerText as $answer_text ) {
// ...
echo $answer_text;
// ...
}
}