2012-04-10 2 views
0

Вот пример xml, который загружается из внешнего XML-файла $ data = file_get_contents ($ filename); $ dom-> loadXML ($ data);Анализ XML-данных с использованием php

Используя php, я хочу пройти через этот xml, чтобы получить заголовок, вопрос и выбор каждого вопроса.

<questions> 
    <record topic = "classic video games"> 
     <title>Centipede</title> 
     <question>How many shots does it take to destroy a mushroom?</question> 
     <choices> 
      <choice correct="no" votes="0">1</choice> 
      <choice correct="no" votes="0">2</choice> 
      <choice correct="no" votes="0">3</choice> 
      <choice correct="yes" votes="0">4</choice> 
     </choices> 
    </record> 
    <record topic = "classic video games"> 
     <title>Quake</title> 
     <question>What is the name of the most powerful weapon in Quake?</question> 
     <choices> 
      <choice correct="no" votes="0">gauntlet</choice> 
      <choice correct="no" votes="0">machine gun</choice> 
      <choice correct="yes" votes="0">BFG2000</choice> 
      <choice correct="no" votes="0">rocket launcher</choice> 
      <choice correct="no" votes="0">railgun</choice> 
     </choices> 
    </record> 
</questions> 

Я хочу, чтобы мой результат будет так:

Title = Centipede 

Question = How many shots does it take to destroy a mushroom? 

I. 1 
II. 2 
III. 3 
IV. 4 

вот моя попытка:

$dom->loadXML($data); 


    $all_records = $dom->getElementsByTagName("record"); 
     $all_choices = $dom->getElementsByTagName("choices"); 
     foreach($all_records as $record){ 
     $question = $record->getElementsByTagName("question")->item(0)->nodeValue; 
     $title = $record->getElementsByTagName("title")->item(0)->nodeValue; 
     echo "<h2> Title=$title</h2>"; 
       echo "<h5><em>Question=$question</em></h5>"; 
       echo "<li>". $all_choices->getElementsByTagName("choice")->nodeValue."</li>\n"; 

     echo "</ul>\n"; 
     echo "</div>\n"; 

    } 

я могу получить титул и вопрос, но не выбор!

ответ

0

Вы должны принести choices набор с использованием внутреннего цикла, как вы осмотрите каждую запись:

<?php 

$dom->loadXML($data); 

$all_records = $dom->getElementsByTagName("record"); 
foreach($all_records as $record) { 
    $question = $record->getElementsByTagName("question")->item(0)->nodeValue; 
    $title = $record->getElementsByTagName("title")->item(0)->nodeValue; 
    $choices = $record->getElementsByTagName('choice'); 

    echo "<h2> Title=$title</h2>"; 
    echo "<h5><em>Question=$question</em></h5>"; 

    echo '<ol class="choices">'; 
    foreach ($choices as $choice) { 
     echo "<li>" . $choice->nodeValue . "</li>\n"; 
    } 
    echo "</ol>"; 

    echo "</div>\n"; 
} 
+0

Я установил его и вернулся к положить ответ, но я нашел твой. большое спасибо! – Timmy

+0

Хе-хе, простите, я не ответил раньше :) –

Смежные вопросы