Questão nº 55
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 55)
Considere o seguinte documento XML.
```xml
<?xml version="1.0" encoding="UTF-8"?>
<itens>
<livro>
<titulo>Cartilha LGPD</titulo>
<preco>10</preco>
</livro>
<celular>
<nome>Celular B</nome>
<manual>
<livro>
<titulo>Manual Celular</titulo>
</livro>
</manual>
</celular>
</itens>
```
Para recuperar o título de todos os livros, deve-se usar a expressão xPath:
- A/titulo
- B/livro//titulo
- C/itens/livro/titulo
- D//livro/../titulo
- E/itens/..//titulo (alternativa correta)
Resposta comentada
Gabarito Alternativa E
XPath usa caminhos para navegar por um documento XML, como se fosse uma estrutura de pastas, selecionando nós (elementos, atributos, texto) que correspondem a um padrão. O caractere `/` indica um filho direto, `//` indica qualquer descendente, e `..` indica o nó pai.
(A) Incorreta: `/titulo` tenta encontrar um elemento `<titulo>` que seja filho direto da raiz do documento, o que não existe no XML.
(B) Incorreta: `/livro//titulo` tenta encontrar um elemento `<livro>` que seja filho direto da raiz do documento, o que não existe. O elemento raiz é `<itens>`.
(C) Incorreta: `/itens/livro/titulo` seleciona apenas o título do primeiro livro ("Cartilha LGPD"), pois a expressão exige que `<livro>` seja filho direto de `<itens>`, ignorando o segundo livro que está mais aninhado.
(D) Incorreta: `//livro/../titulo` primeiro encontra todos os elementos `<livro>`, depois tenta selecionar o pai de cada `<livro>` (`..`) e, a partir desse pai, busca um `<titulo>` como filho direto. Isso não encontra nenhum `<titulo>`, pois os `<titulo>` estão dentro dos `<livro>`, não como filhos dos pais dos `<livro>`. Armadilha: O `//livro` identifica corretamente ambos os livros, mas a continuação `/../titulo` está incorreta, pois busca um `titulo` como irmão do `livro`, não como seu filho.
(E) Correta: `/itens/..//titulo` primeiro seleciona o elemento `<itens>`, depois `..` sobe para o nó raiz do documento (o pai de `<itens>`). A partir do nó raiz do documento, `//titulo` busca por todos os elementos `<titulo>` em qualquer nível dentro do documento, recuperando assim os títulos de todos os livros.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.