segunda-feira, 1 de fevereiro de 2016

Unstring XML COBOL

Olá!

É apresentado neste post o UNSTRING do conteúdo de um XML, pode ser também considerado como exemplo para texto ou variável.

A ideia é que o COBOL seja capaz de extrair o conteúdo que esteja presente entre delimitadores predefinidos, ou seja, neste exemplo independente do conteúdo que o XML tenha entre as TAGs a rotina COBOL deverá extrair.

XML:
Para o exemplo consideremos o XML abaixo:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mensagem nome="testeUnstring">
  <codMsg>1234567890</codMsg>
  <txMsg>Mensagem de teste</txMsg>
  <dtMsg>22/01/2015</dtMsg>
</mensagem>

COBOL em passos:
  1. Recebe o conteúdo do XML, como: TX-CONTEUDO = “<codMsg>1234567890</codMsg><txMsg>Mensagem de teste</txMsg><dtMsg>22/0 1/2015</dtMsg>” 
  2. Para cada TAG com o comando UNSTRING descobre a posição inicial do conteúdo, exemplo: para a TAG <codMsg> a posição inicial é 9 
  3. Com a posição inicial descoberta, é feito um loop para realizar a transferência de um carácter por vez para uma variável temporária até que o delimitador final “<” seja encontrado. 
  4. Por final é transferido o texto para a variável final.
Segue o código respectivo aos passos acima.























































O resultado do código acima é que as variáveis tenham o seguinte resultado:

Código da mensagem -> GDA-CD-MSG = 1234567890
Texto da mensagem   -> GDA-TX-MSG = Mensagem de teste
Data da mensagem    -> GDA-DT-MSG = 22/01/2015

Ou seja, a mecânica/lógica é que se tenha delimitadores (tag) de início e fim, para que por meio do delimitador de início seja encontrado a posição inicial do conteúdo dentro do XML. Para isso, usamos o comando UNSTRING com WITH POINTER VL-PSC-RCPD, onde a variável VL-PSC-RCPD recebe o número da posição do último carácter da tag. Então, se a primeira tag for <codMsg>, a variável VL-PSC-RCPD tem o valor 9, sendo o seguinte passo realizar um loop a partir da posição 9 para extrair um carácter por vez para uma variável temporária até encontrar a tag final </codMsg>.

Caso o XML, seja:
<?xml version="1.0" encoding="ISO-8859-1"?>
<mensagem nome="testeUnstring">
  <codMsg>123312</codMsg>
  <txMsg>Outra mensagem de teste</txMsg>
  <dtMsg>01/01/2014</dtMsg>
</mensagem>

O resultado seria:
Código da mensagem -> GDA-CD-MSG = 123312
Texto da mensagem   -> GDA-TX-MSG = Outra mensagem de teste
Data da mensagem    -> GDA-DT-MSG = 01/01/2014

Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.

Até o próximo post!

Nenhum comentário:

Postar um comentário