Você pode configurar um nó com ESQL para copiar campos de repetição de diversas maneiras.
Considere uma mensagem XML de entrada que contém uma estrutura de repetição:
...
<Field_top>
<field1></field1>
<field1></field1>
<field1></field1>
<field1></field1>
<field1></field1>
</Field_top>
.....
Você não pode copiar o campo de estrutura inteiro com as seguintes instrução:
SET OutputRoot.XMLNS.Output_top.Outfield1 = InputRoot.XMLNS.Field_top.field1;
Essa instrução copia apenas a primeira repetição e, portanto, produz o mesmo resultado dessa instrução:
SET OutputRoot.XMLNS.Output_top.Outfield1[1] = InputRoot.XMLNS.Field_top.field1[1];
Você pode copiar os campos dentro do loop, controlando as iterações com o CARDINALITY do campo de entrada:
SET I = 1;
SET J = CARDINALITY(InputRoot.XMLNS.Field_top.field1[]);
WHILE I <= J DO
SET OutputRoot.XMLNS.Output_top.Outfield1[I] = InputRoot.XMLNS.Field_top.field1[I];
SET I = I + 1;
END WHILE;
Isso pode ser apropriado se você deseja modificar cada campo na mensagem de saída conforme o copia do campo de entrada (por exemplo, incluir um número ou colocar seu conteúdo em maiúsculas) ou depois que tiver sido copiado. Se a mensagem de saída já continha mais campos Field1 que os existentes na mensagem de entrada, os campos excedentes não seriam modificados pelo loop e permaneceriam na mensagem de saída.
A seguinte instrução única copia as iterações dos campos de entrada para os campos de saída e exclui todos os campos excedentes na mensagem de saída.
SET OutputRoot.XMLNS.Output_top.Outfield1.[] = InputRoot.XMLNS.Field_top.field1[];
O exemplo a seguir mostra como é possível renomear os elementos ao copiá-los na árvore de saída. Essa instrução não copia o nome do elemento de origem, portanto, cada elemento field1 se torna um elemento Target.
SET OutputRoot.XMLNS.Output_top.Outfield1.Target[] =
(SELECT I FROM InputRoot.XMLNS.Field_top.field1[] AS I );
O próximo exemplo mostra uma maneira diferente de se fazer a mesma operação; ele produz o mesmo resultado final.
SET OutputRoot.XMLNS.Output_top.Outfield2.Target[]
= InputRoot.XMLNS.Field_top.field1[];
O seguinte exemplo copia pelo nome do elemento de origem. Cada elemento field1 é retido como um elemento field1 no elemento Target.
SET OutputRoot.XMLNS.Output_top.Outfield3.Target.[]
= InputRoot.XMLNS.Field_top.field1[];
Esse exemplo é uma maneira alternativa de atingir o mesmo resultado, com os elementos field1 criados sob o elemento Target.
SET OutputRoot.XMLNS.Output_top.Outfield4.Target.*[]
= InputRoot.XMLNS.Field_top.field1[];
Esses exemplos mostram que existem várias maneiras pelas quais você pode codificar o ESQL para copiar campos de repetição da origem para o destino. Selecione o método mais apropriado para alcançar os resultados necessários.
Os principais mostrados aqui se aplicam igualmente a todas as áreas da árvore de mensagens na qual você pode gravar os dados, não apenas a árvore de mensagens de saída.