Pular para o conteúdo principal

Consulta XPath

Configuração atual da tarefa XPath Query no Workflow Designer

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 xmlns ou xmlns: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:

PrefixNamespace
nshttp://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.
  • resultJson: representa o resultado da execução da tarefa em formato JSON, incluindo informações gerais, configurações e detalhes da execução.