Puede configurar un nodo con ESQL para copiar campos de repetición de varios modos.
Imagine un mensaje XML de entrada que contiene una estructura de repetición:
... <Field_top> <field1></field1> <field1></field1> <field1></field1> <field1></field1> <field1></field1> </Field_top> .....
No puede copiar este campo de estructura completo con la sentencia siguiente:
SET OutputRoot.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;
Esta sentencia sólo copia la primera repetición y, por consiguiente, produce el mismo resultado que esta sentencia:
SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.Field_top.field1[1];
Puede copiar los campos en un bucle, controlando las iteraciones con la cardinalidad (CARDINALITY) del 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;
Es posible que esto sea apropiado si desea modificar cada campo del mensaje de salida mientras lo copia del campo de entrada (por ejemplo, añadirle un número o convertir el contenido a mayúsculas) o después de haberlo copiado. Si el mensaje de salida ya contiene más campos Field1 de los que existían en el mensaje de entrada, el bucle no modificará los campos sobrantes y éstos permanecerán en el mensaje de salida.
La siguiente sentencia individual copia las iteraciones de los campos de entrada en los campos de salida y suprime los campos sobrantes del mensaje de salida.
SET OutputRoot.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];
El ejemplo siguiente le muestra cómo puede redenominar los elementos cuando los copia en el árbol de salida. Dado que esta sentencia no copia el nombre de elemento de origen, cada elemento field1 se convierte en un elemento Target.
SET OutputRoot.XML.Output_top.Outfield1.Target[] = (SELECT I FROM InputRoot.XML.Field_top.field1[] AS I );
El ejemplo siguiente muestra un procedimiento diferente para realizar la misma operación; produce el mismo resultado final.
SET OutputRoot.XML.Output_top.Outfield2.Target[] = InputRoot.XML.Field_top.field1[];
El ejemplo siguiente copia el nombre de elemento de origen. Cada elemento field1 se conserva como un elemento field1 bajo el elemento Target.
SET OutputRoot.XML.Output_top.Outfield3.Target.[] = InputRoot.XML.Field_top.field1[];
Este ejemplo es un procedimiento alternativo para obtener el mismo resultado, donde los elementos field1 se crean bajo el elemento Target.
SET OutputRoot.XML.Output_top.Outfield4.Target.*[] = InputRoot.XML.Field_top.field1[];
Estos ejemplos muestran que hay varios procedimientos que se pueden utilizar para codificar ESQL a fin de copiar campos de repetición del origen en el destino. Seleccione el método más apropiado para obtener los resultados que necesita.
Los principales que se muestran aquí se aplican igualmente a todas las áreas del árbol de mensaje en las que puede grabar datos, no sólo al árbol de mensaje de salida.