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.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;
Essa instrução copia apenas a primeira repetição e, portanto, produz o mesmo resultado dessa instrução:
SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.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.XML.Field_top.field1[]); WHILE I <= J DO SET OutputRoot.XML.Output_top.Outfield1[I] = InputRoot.XML.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.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];
O exemplo abaixo mostra como você pode renomear os elementos ao copiá-los para a á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.XML.Output_top.Outfield1.Target[] = (SELECT I FROM InputRoot.XML.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.XML.Output_top.Outfield2.Target[] = InputRoot.XML.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.XML.Output_top.Outfield3.Target.[] = InputRoot.XML.Field_top.field1[];
Esse exemplo é uma maneira alternativa de atingir o mesmo resultado, com os elementos field1 criados sob o elemento Target.
SET OutputRoot.XML.Output_top.Outfield4.Target.*[] = InputRoot.XML.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.