Questão nº 75
Questão de Tecnologia da Informação · FGV MP-SC 2022 (nº 75)
Observe o seguinte recorte do documento catalogo.xsl
```
<xsl:template match="/">
<html>
<body>
<table border="1">
<tr>
<th>descricao</th>
</tr>
<xsl:for-each select="catalogo/item">
<xsl:sort select="quantidade"/>
<tr>
<td><xsl:value-of select="descricao"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
```
Observe o seguinte recorte do documento catalogo.xml
```
<?xml-stylesheet type="text/xsl" href="catalogo.xsl"?>
<catalogo>
<item>
<descricao>item1</descricao>
<quantidade>250</quantidade>
</item>
<item>
<descricao>item2</descricao>
<quantidade>20</quantidade>
</item>
</catalogo>
```
Ao abrir o documento catalogo.xml em um browser, o resultado será:
- A```
descricao
item1
item2
``` - B```
quantidade
20
250
``` - C```
descricao quantidade
item1 250
item2 20
``` - D```
descricao
item2
item1
``` (alternativa correta) - E```
descricao quantidade
item2 20
item1 250
```
Resposta comentada
Gabarito Alternativa D
O XSLT é uma linguagem que transforma XML em outro formato (como HTML). O xsl:for-each percorre os itens na ordem em que aparecem no XML, mas o xsl:sort reordena essa iteração com base no valor do elemento escolhido (aqui, quantidade). Como quantidade é comparado como texto (não número), a ordenação é alfabética: "20" vem antes de "250" (porque '2' < '2'? não, '2' = '2', então compara o segundo caractere: '0' < '5', logo "20" < "250"). Assim, a ordem de exibição fica: item2 (quantidade 20) e depois item1 (quantidade 250). A tabela gerada só tem a coluna descricao, pois é o único xsl:value-of no template.
- (A) Incorreta: Mostra
item1antes deitem2, ignorando oxsl:sortque reordena porquantidade(20 antes de 250). A ordem original do XML não é mantida. - (B) Incorreta: A tabela não exibe a coluna
quantidade; o template só imprimedescricao. Além disso, a ordem dos valores (20, 250) não corresponde à saída (que seria item2, item1). - (C) Incorreta: Inclui a coluna
quantidade, mas o XSLT não a seleciona para exibição. A ordem também está errada (item1 antes de item2). - (D) Correta: O
xsl:sortordena porquantidadecomo string: "20" < "250" (alfabeticamente), entãoitem2(20) aparece antes deitem1(250). A tabela só mostradescricao, conforme oxsl:value-of. - (E) Incorreta: Mistura duas colunas (descricao e quantidade) que não são geradas pelo template, e a ordem está correta (item2, item1), mas a estrutura da tabela está errada.
Armadilha da banca (distrator mais tentador - E): Muitos alunos assumem que xsl:sort ordena numericamente (20 < 250) e que a tabela mostraria as duas colunas, mas o template só imprime descricao e a ordenação é lexicográfica (texto), não numérica. A banca explora a confusão entre ordenação numérica vs. alfabética e a omissão da coluna quantidade na saída.
Fonte: FGV MP-SC 2022 Analista em Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.