Acessando Campos com Condições no Xpath

Já falamos como acessar campos com expressões xpath aqui no blog.
Mas e se, dentro desse xpath tivesse que ter condições, IFs, comparações?
Então vamos levar em consideração esse schema simples que representa os Produtos de uma empresa:

image

Vamos supor 3 situações:
  • A primeira que eu preciso retornar o valor do campo Descricao do terceiro registro.
Então em um Message Assigment ficaria dessa maneira.


   1:  strTemp = xpath(msgProdutos, "string(/*[local-name()='PRODUTOS' and namespace-uri()='http://SamplePubSubscribe2.schemas.schProdutos']/*[local-name()='PRODUTO' and namespace-uri()=''][3]/*[local-name()='Descricao' and namespace-uri()=''])")

Notem que depois da tag que se repete, a tag PRODUTO, coloco o indice que desejo retornar [3].
  • Na segunda situação vamos supor que eu deveria retornar a quantidade de registros na tag PRODUTO, quero saber quantas vezes ela aparece dentro da mensagem.
Ficaria assim:

   1:  iCount = xpath(msgProdutos, "count(/*[local-name()='PRODUTOS' and namespace-uri()='http://SamplePubSubscribe2.schemas.schProdutos']/*[local-name()='PRODUTO' and namespace-uri()=''])");

Aqui, na expressao xpath coloquei o comando count para retornar a quantidades de registro da tag PRODUTO, e a variável iCount é um int32.

  • E finalmente, vamos imaginar a necessidade de retornar o Produto que tem um código qualquer, mas não sei em qual posição ele virá. Então preciso fazer alguma coisa do tipo Se Codigo = ‘2345’ então;
Segue a solução:

   1:  strTemp = xpath(msgProdutos, "string(/*[local-name()='PRODUTOS']/*[local-name()='PRODUTO'][*[local-name()='Codigo']='110110']/*[local-name()='Descricao'])");

Aqui tirei o namespace para ficar mais simples e conseguir incluir a condição. Aqui está retornando uma string do campo descrição mas está fazendo a condição Codigo = “110110”

E como colocamos a condição AND nesse xpath? Assim:

   1:  strTemp = xpath(msgProdutos, "string(/*[local-name()='PRODUTOS']/*[local-name()='PRODUTO'][*[local-name()='Codigo']='110110' and *[local-name()='Teste']='1']/*[local-name()='Descricao'])");


Resumindo, aprendemos mais três maneiras de acessar os campos com xpath nesse post. Fica documentado.

Até a próxima.

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog