Stream XML File Reader

O Portal de Documentação oferece guias para todas as opções de componentes na Digibee Integration Platform. Este artigo aborda o Stream XML File Reader.

O Stream XML File Reader realiza a leitura de um arquivo XML local e, com base na configuração de um nó desejado e campos de contexto, faz a entrega de uma estrutura XML e de propriedades de contexto para cada nó encontrado e dispara subpipelines para processar cada mensagem. O componente deve ser utilizado para arquivos grandes quando há a necessidade de ler partes do todo de forma eficiente.

Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por expressões Double Braces estão marcados com (DB).

Parâmetro
Descrição
Valor padrão
Tipo de dado

File name (DB)

Nome ou caminho completo (full file path, ex: tmp/processed/file.txt) do arquivo XML local.

N/A

String

Charset

Nome do código de caracteres para a leitura do arquivo (padrão UTF-8).

UTF-8

String

Node Path (DB)

Caminho do nó desejado do arquivo XML a ser transmitido. Ex.: //root/level1/level2/desirednode.

N/A

String

Context Paths

Defina aqui caminhos de tag pai que representam campos que adicionam contexto ao nó desejado. Caso haja mais de um, separe-os por vírgula. Ex.: //root/node1/code,//root/node2/description.

N/A

String

Ignore Paths

Defina aqui os caminhos que serão ignorados e não retornarão ao nó desejado. Ex.: //root/node1/email,//root/node2/city.

N/A

String

Ignore Nested Child Nodes

Se a opção estiver ativada, os nós filhos aninhados (nós que não são filhos diretos do nó desejado) serão ignorados. Nesse caso, o nó de mesmo nível do nó desejado será retornado, mas os nós abaixo do mesmo serão ignorados.

N/A

Boolean

Element Identifier

Atributo que será enviado em caso de erros.

N/A

String

Parallel Execution Of Each Iteration

Ocorre em paralelo com a execução do loop.

N/A

Booleano

Fail On Error

A ativação desse parâmetro suspende a execução do pipeline apenas quando há uma ocorrência grave na estrutura da iteração, impedindo a sua conclusão por completo. A ativação do parâmetro Fail On Error não tem ligação com erros ocorridos nos componentes utilizados para a construção dos subpipelines (onProcess e onException).

N/A

Booleano

Remove whitespaces

Se a opção estiver ativada, whitespaces ao início/fim de todos os valores de caracteres XML são removidos.

N/A

Booleano

Coalesce

Se a opção estiver ativada, valores de caracteres XML são lidos como strings únicas.

N/A

Booleano

Uso recomendado para Remove withespaces e Coalesce

Tenha cuidado para não comprometer a integridadedos dados quando ativar a opção Remove whitespaces. Ao transmitir arquivos com grandes valores de caracteres, o componente processa esses valores durante vários passos antes de consolidá-los em um valor único, e a remoção dos whitespaces é aplicada durante cada um desses passos.

Uma forma segura de usar Remove whitespaces é combiná-la com a opção Coalesce. Isso garante que os valores de caracteres dentro das tags XML serão lidos de uma só vez, sem quebrá-los em vários partes primeiro. No entanto, lembre-se que quando a opção Coalesce é habilitada, ela pode demandar mais recursos do pipeline ao ler grandes blocos de dados de uma vez.

Fluxo de mensagens

Entrada

Não se espera nenhuma mensagem de entrada específica e sim apenas a existência de um arquivo XML no diretório local do pipeline e o preenchimento dos campos obrigatórios File Name e Node Path para o processamento do arquivo.

Saída

{
"total": 0,
"success": 0,
"failed": 0
}
  • total: número total de linhas processadas.

  • success: número total de linhas processadas com sucesso.

  • failed: número total de linhas cujo processamento falhou.

Importante: para saber se uma linha foi processada corretamente, deve haver o retorno { "success": true } para cada linha processada.

O componente joga uma exceção se o File Name não existir ou não puder ser lido.

A manipulação de arquivos dentro de um pipeline ocorre de forma protegida. Todos os arquivos podem ser acessados apenas por um diretório temporário, no qual cada pipeline key dá acesso ao seu próprio conjunto de arquivos.

O Stream XML File Reader realiza processamento em lote. Para entender melhor o conceito, leia o artigo sobre Processamento em lote.

Stream XML File Reader em Ação

Os cenários a seguir estão utilizando como base o seguinte arquivo XML:

  • File name: file.xml

  • Conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<list-info qty="4">products</list-info>
<products>
<product>
<price>20.75</price>
<product>Chair</product>
<tags>
<element>NEW</element>
<element>FURNITURE</element>
</tags>
</product>
<product>
<price>399.99</price>
<product>TV</product>
<tags>
<element>NEW</element>
<element>FURNITURE</element>
</tags>
</product>
<product>
<price>100</price>
<product>Couch</product>
<tags>
<element>NEW</element>
<element>FURNITURE</element>
</tags>
</product>
<product>
<price>78.99</price>
<product>Table</product>
<tags>
<element>NEW</element>
<element>FURNITURE</element>
</tags>
</product>
</products>
</root>

Realizando o stream do arquivo informando o nó desejado

Entrada

  • File Name: file.xml

  • Node Path: //root/products/product

Saída

{
"total": 4,
"success": 4,
"failed": 0
}

Cada elemento identificado pelo caminho do nó desejado será processado de forma independente:

  • Primeiro subfluxo:

{
"node":"<product><price>20.75</price><product>Chair</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Segundo subfluxo:

{
"node":"<product><price>399.99</price><product>TV</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Terceiro subfluxo:

{
"node":"<product><price>100</price><product>Couch</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Quarto subfluxo:

{
"node":"<product><price>78.99</price><product>Table</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}

Realizando o stream do arquivo informando o nó desejado e campos de contexto

Entrada

  • File Name: file.xml

  • Node Path: //root/products/product

  • Context Paths: //root/list-info

Saída

{
"total": 4,
"success": 4,
"failed": 0
}

Cada elemento identificado pelo caminho do nó desejado será processado de forma independente:

  • Primeiro subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>20.75</price><product>Chair</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Segundo subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>399.99</price><product>TV</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Terceiro subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>100</price><product>Couch</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}
  • Quarto subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>78.99</price><product>Table</product><tags><element>NEW</element><element>FURNITURE</element></tags></product>"
}

Realizando o stream do arquivo informando o nó desejado, campos de contexto e nós à serem ignorados

Entrada

  • File Name: file.xml

  • Node Path: //root/products/product

  • Context Paths: //root/list-info

  • Ignore Paths: //root/products/product/tags

Saída

{
"total": 4,
"success": 4,
"failed": 0
}

Cada elemento identificado pelo caminho do nó desejado será processado de forma independente:

  • Primeiro subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>20.75</price><product>Chair</product></product>"
}
  • Segundo subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>399.99</price><product>TV</product></product>"
}
  • Terceiro subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>100</price><product>Couch</product></product>"
}
  • Quarto subfluxo:

{
"context": {
"root": {
"list-info": {
"attributes": {
"qty": "4"
},
"value": "products"
}
}
},
"node": "<product><price>78.99</price><product>Table</product></product>"
}

Realizando o stream do arquivo informando o nó desejado e ignorando nós filhos aninhados

Entrada

  • File Name: file.xml

  • Node Path: //root/products/product

  • Ignore Nested Child Nodes: ativado

Saída

{
"total": 4,
"success": 4,
"failed": 0
}

Cada elemento identificado pelo caminho do nó desejado será processado de forma independente:

  • Primeiro subfluxo:

{
"data": {
"node": "<product><price>20.75</price><product>Chair</product><tags></tags></product>"
},
"success": true
}
  • Segundo subfluxo:

{
"node": "<product><price>399.99</price><product>TV</product><tags></tags></product>"
}
  • Terceiro subfluxo:

{
"node": "<product><price>100</price><product>Couch</product><tags></tags></product>"
}
  • Quarto subfluxo:

{
"node": "<product><price>78.99</price><product>Table</product><tags></tags></product>"
}

Informações adicionais

O Stream XML File Reader utiliza um mecanismo de leitura por eventos, por meio do qual cada tipo de dado presente no arquivo é um evento a ser processado. Com isso, existem alguns tipos de evento que não estão contemplados durante o stream do arquivo. São eles:

  • PROCESSING INSTRUCTION

  • START DOCUMENT

  • END DOCUMENT

  • SPACE

  • ENTITY REFERENCE

  • ENTITY DECLARATION

  • DTD

  • NOTATION DECLARATION

Atualizado