【问题标题】:PHP SimpleXML display of irregular child nodesPHP SimpleXML 显示不规则子节点
【发布时间】:2014-06-30 11:20:41
【问题描述】:

我有一个包含不规则数量子节点的 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

【问题讨论】:

    标签: php simplexml


    【解决方案1】:

    只需为答案添加第二个内部 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

    【讨论】:

      【解决方案2】:

      我不确定我是否误解了这个问题,但要遍历答案,您只需要一个嵌套的 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;
                // ...
           }
       }
      

      【讨论】:

        猜你喜欢
        • 2014-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        • 1970-01-01
        • 2015-10-23
        相关资源
        最近更新 更多