Consulta XPath
A Tarefa Consulta XPath é uma ferramenta especializada para extrair dados de um documento XML. Recebe como entrada um texto XML proveniente de uma tarefa anterior e aplica uma expressão XPath (XML Path Language) para selecionar nós ou valores específicos dentro desse documento.
É uma tarefa fundamental para processar respostas de chamadas SOAP, analisar ficheiros de configuração XML ou extrair informações de quaisquer dados estruturados em formato XML.
Configuração
A configuração concentra-se na definição da expressão de pesquisa e no tratamento opcional de namespaces.
- Conteúdo XML: o conteúdo do documento XML do qual se pretendem extrair dados.
- Expressão XPath: O coração da Tarefa. Neste campo, deve ser inserida a expressão XPath que define quais elementos se deseja selecionar do documento XML.
- Namespaces (não obrigatórios): Esta secção é fundamental no processamento de documentos XML que utilizam namespaces, definidos através de atributos como
xmlnsouxmlns:prefix.
Exemplo de Utilização (Sem Namespace)
Consideremos um ficheiro XML simples, como o de uma biblioteca, que não utiliza namespaces:
<?xml version="1.0" encoding="UTF-8"?>
<libreria>
<libro id="1">
<titolo>Il Signore degli Anelli</titolo>
<autore>J.R.R. Tolkien</autore>
<anno>1954</anno>
</libro>
<libro id="2">
<titolo>1984</titolo>
<autore>George Orwell</autore>
<anno>1949</anno>
</libro>
<libro id="3">
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
<anno>1980</anno>
</libro>
</libreria>
Objetivo: Extrair apenas os títulos dos livros publicados após 1950.
Configuração da Tarefa:
- Expressão XPath: Insere-se a expressão: /libreria/libro[anno > 1950]/titolo
- Namespaces: A secção é deixada vazia.
Resultado Esperado: O parâmetro result da Tarefa conterá um novo documento XML com os dois títulos que satisfazem a condição:
<titolo>Il Signore degli Anelli</titolo>
<titolo>Il Nome della Rosa</titolo>
Exemplo de Utilização (Com Namespace)
Enquanto o exemplo anterior é válido para XML simples, esta tarefa também gere XML em que os elementos pertencem a um namespace predefinido, exigindo o associamento manual de um prefixo ao namespace para que o XPath possa ser utilizado corretamente.
Consideremos uma versão do XML que utiliza um namespace:
<libreria xmlns="http://example.com/libri">
<libro>
<anno>1321</anno>
<titolo>La Divina Commedia</titolo>
<autore>Dante Alighieri</autore>
</libro>
<libro>
<anno>1600</anno>
<titolo>Amleto</titolo>
<autore>William Shakespeare</autore>
</libro>
<libro>
<anno>1980</anno>
<titolo>Il Nome della Rosa</titolo>
<autore>Umberto Eco</autore>
</libro>
</libreria>
Neste caso, uma expressão XPath como /libreria/libro/titolo falharia, porque os nós não se chamam "libreria" ou "libro", mas são qualificados pelo namespace http://example.com/libri.
Uso de Prefixos e Namespaces
Se quisermos extrair apenas o título do livro publicado após 1950, deste XML com namespace, devemos primeiro "ensinar" à Tarefa o que significa o prefixo que vamos usar (ex. ns).
Na secção Namespaces, adicionamos uma linha:
| Prefix | Namespace |
|---|---|
| ns | http://example.com/libri |
Agora podemos escrever a expressão XPath utilizando o prefixo que registámos:
//ns:libro[ns:anno > 1950]/ns:titolo
Resultado Esperado
O parâmetro result da Tarefa conterá um novo documento XML com apenas o título que satisfaz a condição, preservando o seu namespace original:
<ns:titolo xmlns:ns="http://example.com/libri">Il Nome della Rosa</ns:titolo>
Se o prefixo e o namespace não forem definidos, o parâmetro result conterá em vez disso uma mensagem de erro: Warning: DOMXPath::query(): Undefined namespace prefix
Nota
Quando os elementos XML têm um prefixo explícito:
<ns1:libreria xmlns:ns1="http://example.com/libri"><ns1:libro><ns1:anno>1980</ns1:anno><ns1:titolo>Il Nome della Rosa</ns1:titolo></ns1:libro></ns1:libreria>
Não é necessário associar manualmente um prefixo ao namespace. De facto, o XPath pode utilizar diretamente o prefixo já presente (ns1) para identificar os elementos, simplificando a escrita das consultas em comparação com os namespaces definidos sem prefixo.
Parâmetros de Saída
A Tarefa expõe um único Parâmetro de Saída principal:
- result: Contém o resultado da consulta XPath ou uma mensagem de erro.
- Se a consulta retornar um único valor de texto simples (ex: o conteúdo de uma tag
<titolo>), o result conterá diretamente esse valor como string. - Se a consulta retornar um ou mais nós XML (estruturas complexas), o result conterá um novo documento XML bem formatado contendo apenas os nós encontrados.
- Se a consulta retornar um único valor de texto simples (ex: o conteúdo de uma tag
- resultJson: representa o resultado da execução da tarefa em formato JSON, incluindo informações gerais, configurações e detalhes da execução.