Stream XML File Reader

Saiba mais sobre o conector Stream XML File Reader e como utilizá-lo na Digibee Integration Platform.

O Stream XML File Reader lê um arquivo XML local e identifica nós de acordo com o target node e os context fields configurados. Para cada nó encontrado, ele gera uma estrutura XML junto com suas propriedades de contexto e aciona subpipelines para processar cada mensagem resultante de forma independente. Esse conector é usado para ler e processar grandes arquivos XML de maneira eficiente, em partes, sem carregar o arquivo inteiro na memória.

Parâmetros

Configure o conector utilizando os parâmetros abaixo. Campos que aceitam expressões Double Braces estão marcados na coluna Suporta DB.

Parâmetro
Descrição
Tipo
Suporta DB
Valor

Alias

Nome (alias) para o output deste conector, permitindo referenciá-lo posteriormente no fluxo usando expressões Double Braces.

String

stream-xml-f-reader-1

File name

Nome do arquivo ou caminho completo (por exemplo, tmp/processed/file.txt) do arquivo XML local.

String

N/A

Charset

Nome do conjunto de caracteres para leitura do arquivo.

String

UTF-8

Node Path

Caminho do nó desejado a ser lido a partir do arquivo XML (//root/level1/level2/desirednode).

String

N/A

Context Paths

Define os caminhos das tags que representam campos que adicionam contexto ao nó desejado (//root/node1/code ou //root/node2/description).

String

N/A

Ignore Paths

Define os caminhos que serão ignorados e não retornados dentro do nó desejado (//root/node1/email,//root/node2/city).

String

N/A

Ignore Nested Child Nodes

Quando ativado, ignora nós filhos aninhados (que não sejam filhos diretos do target node). Nesse caso, apenas nós no mesmo nível do target node são retornados, enquanto nós mais profundos são excluídos.

Boolean

N/A

Element Identifier

Atributo que será enviado em caso de erros.

String

N/A

Parallel Execution Of Each Iteration

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

Booleano

N/A

Remove whitespaces

Quando ativado, remove espaços em branco no início e no final de todos os valores de caracteres XML.

Booleano

N/A

Coalesce

Quando ativado, os valores de caracteres XML são lidos como uma única string.

Booleano

N/A

Escape Special Characters

Quando ativado, faz o escape automático de caracteres reservados do XML (&, <, >) para evitar erros de parsing durante a transformação dos dados.

Booleano

N/A

Tolerate Invalid XML

Quando ativado, retorna um objeto JSON alternativo em vez de lançar uma exceção para XML inválido.

Booleano

N/A

Fail On Error

Quando ativado, interrompe a execução do pipeline caso ocorra um erro crítico durante a iteração. Não se aplica a erros em conectores utilizados dentro de subpipelines (onProcess e onException).

Booleano

N/A

Fluxo de mensagens

Entrada

Nenhuma mensagem de entrada específica é necessária. No entanto, um arquivo XML válido deve existir no diretório local do pipeline, e os campos File Name e Node Path devem estar corretamente configurados para o processamento.

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.

Quando uma linha é processada com sucesso, o subpipeline correspondente retorna "success": true }

File handling and Batch processing

  • O conector lança uma exceção se o File Name não existir ou não puder ser lido.

  • O manuseio de arquivos dentro de um pipeline é protegido: todos os arquivos são acessados por meio de um diretório temporário, e cada pipeline key tem acesso apenas ao seu próprio conjunto de arquivos.

  • O Stream XML File Reader realiza batch processing, o que significa que ele processa dados continuamente em lotes menores e controlados, garantindo melhor eficiência e uso de recursos.

Event Handling: Unsupported Events

O Stream XML File Reader usa um mecanismo de leitura baseado em eventos, no qual cada tipo de dado no arquivo XML é tratado como um evento a ser processado. No entanto, alguns tipos de evento não são suportados durante o streaming — ou seja, não são tratados pelo conector:

  • PROCESSING INSTRUCTION

  • START DOCUMENT

  • END DOCUMENT

  • SPACE

  • ENTITY REFERENCE

  • ENTITY DECLARATION

  • DTD

  • NOTATION DECLARATION

Esses eventos não são necessários para o processamento típico de dados XML, e sua omissão ajuda a melhorar o desempenho ao lidar com grandes arquivos.

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>"
}

Atualizado

Isto foi útil?