Questão nº 34

Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2021 (nº 34)

CESGRANRIO2021Técnico Científico - Área de Formação: Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Cver comentário ↓

Ao participar de uma equipe para desenvolvimento de um website para a intranet do banco em que trabalhava, um programador teve como missão criar uma tabela HTML a partir de um arquivo XML que indicava clientes e seus saldos.

O fragmento de XML a seguir é um exemplo da estrutura do XML do arquivo que conterá os dados.

<?xml version="1.0" encoding="UTF-8"?>
<clientes>
  <cliente>
    <nome>Ana Zurique</nome>
    <saldo>3000</saldo>
  </cliente>
  <cliente>
    <nome>Bernardo Washington</nome>
    <saldo>4500</saldo>
  </cliente>
  <cliente>
    <nome>Carlos York</nome>
    <saldo>12345</saldo>
  </cliente>
</clientes>

Para esse arquivo, a tabela gerada deve ter a seguinte aparência:

Figura da questão de Tecnologia da Informação

Inicialmente, o programador construiu o seguinte arquivo em XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr>
        <th>Cliente</th>
        <th>Saldo</th>
      </tr>
      
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Que sequência de instruções deve substituir o comentário ``, de forma a gerar a tabela no formato apresentado?

Resposta comentada

Gabarito Alternativa C

Conceito-chave: No XSLT, o xsl:for-each define o contexto atual (o nó onde você está). Dentro dele, xsl:value-of busca os filhos diretos desse contexto, sem repetir o caminho inteiro. É como dizer "para cada cliente, pegue o nome e o saldo dele".

  • (A) Incorreta: O select="clientes/cliente/" tem uma barra final desnecessária e inválida; além disso, dentro do loop, nome e saldo seriam buscados a partir de um contexto errado (o nó vazio após a barra).
  • (B) Incorreta: Dentro do for-each em clientes/cliente, usar clientes/cliente/nome tenta buscar o caminho completo a partir da raiz, ignorando o contexto atual — isso repetiria o primeiro cliente em todas as linhas ou geraria erro.
  • (C) Correta: O select="clientes/cliente" itera sobre cada <cliente>; dentro dele, xsl:value-of select="nome" e select="saldo" referenciam os filhos diretos do contexto atual, gerando exatamente uma linha por cliente com seus respectivos valores.
  • (D) Incorreta: select="clientes/" é inválido (barra final) e, mesmo se fosse clientes, o contexto seria o nó <clientes>, não cada <cliente> — então cliente/nome pegaria apenas o primeiro cliente repetido.
  • (E) Incorreta: O select="clientes" define o contexto como o elemento raiz <clientes>; cliente/nome retornaria apenas o primeiro <cliente> (ou todos concatenados), não gerando uma linha por cliente.

Armadilha da banca: A alternativa B é a mais tentadora porque parece "completa" ao repetir o caminho inteiro, mas no XSLT isso quebra o contexto do loop — o correto é usar caminhos relativos ao nó atual. A pegadinha é confundir XSLT com XPath absoluto, achando que precisa repetir tudo.

Fonte: CESGRANRIO BASA 01/2021 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho