Puede configurar un nodo con ESQL de modo que copie los campos que se repiten, siguiendo varios métodos.
Poniendo como ejemplo un mensaje XML de entrada que contenga una estructura de repetición:
... <Field_top> <field1></field1> <field1></field1> <field1></field1> <field1></field1> <field1></field1> </Field_top> .....
No puede copiar todo este campo de estructura con la sentencia siguiente:
SET OutputRoot.XML.Output_top.Outfield1 = InputRoot.XML.Field_top.field1;
Esta sentencia solamente copia la primera repetición y, por lo tanto, genera el mismo resultado que esta sentencia:
SET OutputRoot.XML.Output_top.Outfield1[1] = InputRoot.XML.Field_top.field1[1];
Puede copiar los campos dentro de un bucle, controlando las iteraciones con el valor de 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;
Esto puede resultar adecuado si desea modificar cada campo del mensaje de salida a medida que lo copia desde el campo de entrada (por ejemplo, añadirle un número o convertirlo 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 adicionales, los cuales permanecerán en el mensaje de salida.
La siguiente sentencia individual copia las iteraciones de los campos de entrada a los campos de salida y suprime cualquier campo adicional del mensaje de salida.
SET OutputRoot.XML.Output_top.Outfield1.[] = InputRoot.XML.Field_top.field1[];
El ejemplo siguiente le muestra cómo puede cambiar el nombre de los elementos cuando los copia en el árbol de salida. Esta sentencia no se copia por el nombre del elemento de origen, por lo tanto, 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 modo diferente de realizar la misma operación. Genera el mismo resultado final.
SET OutputRoot.XML.Output_top.Outfield2.Target[] = InputRoot.XML.Field_top.field1[];
El ejemplo siguiente se copia por el nombre del elemento de origen. Cada elemento field1 se mantiene como un elemento field1 bajo el elemento Target.
SET OutputRoot.XML.Output_top.Outfield3.Target.[] = InputRoot.XML.Field_top.field1[];
Este ejemplo es una alternativa para obtener el mismo resultado, en el que los elementos field1 se crean bajo el elemento Target.
SET OutputRoot.XML.Output_top.Outfield4.Target.*[] = InputRoot.XML.Field_top.field1[];
Estos ejemplos le muestran que hay varios modos en los que puede codificar ESQL para copiar los campos de repetición del origen al destino. Seleccione el método más adecuado para obtener los resultados que requiera.
Los principales que se muestran aquí se aplican igualmente a todas las áreas del árbol de mensajes en el que puede grabar datos no simplemente el árbol de mensajes de salida.
Conceptos relacionados
Flujos de mensajes
ESQL
Tareas relacionadas
Diseño de un flujo de mensajes
Gestión de archivos ESQL
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
ESQL
Sentencia SET
Sentencia WHILE
Función CARDINALITY
Avisos |
Marcas registradas |
Descargas |
Biblioteca |
Soporte |
Información de retorno (feedback)
![]() ![]() |
ac20420_ |