Count number of questions in an XML file

Asked

Viewed 144 times

0

Colleagues.

I have an XML file that is divided as follows:

    <gabarito>
        <avaliacao tipo="A" codigo="10" segmento="Ensino Médio" serie="1ª série" questoes="20">
            <disciplina nome="Português">
      <questao numero="1" alternativas="A,B,C,D,E">
                    <resposta>A</resposta>
                </questao>
                <questao numero="2" alternativas="A,B,C,D,E">
                    <resposta>C</resposta>
                </questao>
                <questao numero="3" alternativas="A,B,C,D,E">
                    <resposta>D</resposta>
                </questao>
                <questao numero="4" alternativas="A,B,C,D,E">
                    <resposta>C</resposta>
                </questao>
                <questao numero="5" alternativas="A,B,C,D,E">
                    <resposta>B</resposta>
                </questao>
            <questao numero="6" alternativas="A,B,C,D,E">
                <resposta>D</resposta>
            </questao>
            <questao numero="7" alternativas="A,B,C,D,E">
                <resposta>D</resposta>
            </questao>
            <questao numero="8" alternativas="A,B,C,D,E">
                <resposta>B</resposta>
            </questao>
            <questao numero="9" alternativas="A,B,C,D,E">
                <resposta>C</resposta>
            </questao>
            <questao numero="10" alternativas="A,B,C,D,E">
                <resposta>B</resposta>
            </questao>

    </disciplina>           

            <disciplina nome="Inglês">          
                <questao numero="11" alternativas="A,B,C,D,E">
                    <resposta>D</resposta>
                </questao>
                <questao numero="12" alternativas="A,B,C,D,E">
                    <resposta>E</resposta>
                </questao>          
                <questao numero="13" alternativas="A,B,C,D,E">
                    <resposta>D</resposta>
                </questao>
                <questao numero="14" alternativas="A,B,C,D,E">
                    <resposta>D</resposta>
                </questao>
                <questao numero="15" alternativas="A,B,C,D,E">
                    <resposta>C</resposta>
                </questao>
            </disciplina>           
            <disciplina nome="Espanhol">            
                <questao numero="16" alternativas="A,B,C,D,E">
                    <resposta>D</resposta>
                </questao>
                <questao numero="17" alternativas="A,B,C,D,E">
                    <resposta>E</resposta>
                </questao>
                <questao numero="18" alternativas="A,B,C,D,E">
                    <resposta>E</resposta>
                </questao>
                <questao numero="19" alternativas="A,B,C,D,E">
                    <resposta>A</resposta>
                </questao>
                <questao numero="20" alternativas="A,B,C,D,E">
                    <resposta>C</resposta>
                </questao>
            </disciplina>       
        </avaliacao>
    </gabarito>

When I run the code below, it returns to me only the questions of Portuguese. How do I get all the questions of all the disciplines?

foreach($xml->avaliacao->disciplina->questao as $listar => $valor) {

                    $numero =  $valor["numero"];                 
                    $respostas = $valor->resposta;

        if($_POST["respostas"][$c] == $respostas){
            $valorR = "1";
            $somar[0] = $cc++;    

                        $respostasC = $_POST["respostas"][$c];
                    $rc[] = $respostasC;
                        $questoesC[] = $valor->attributes()->numero;                               

                }else{
            $valorR = "0";
            $somarE[0] = $ce++;    

                        $respostasE = $_POST["respostas"][$c];
                        $rr[] = $respostasE;
                        $questoesE[] = $valor->attributes()->numero;                                        
        }
        $c++;           
     }

1 answer

1


You’re just taking the first block of disciplina because of the exact reference.

foreach($xml->avaliacao->disciplina->questao as $listar => $valor)

You need to do 2 foreach if you want all the questions.
Would something like this:

foreach($xml->avaliacao->disciplina as $listar => $valor) {
    foreach ($valor as $key => $value) {
        # code...
        $numero =  $valor["numero"];                 
        $respostas = $value->resposta;
        echo $respostas;
    }
    echo '<br>';
 }

I tested with your XML here and it worked.
I hope I’ve helped.

  • Thanks again for the help Ricardo. It worked!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.