Observe el formato del mensaje de entrada XML
siguiente:
<MRM>
<inner>abcde fghij 12345</inner>
</MRM>
donde el elemento inner es del tipo
xsd:list y, por consiguiente, tiene tres valores de serie de
caracteres asociados, en lugar de un solo valor.
Para copiar
los tres valores en un mensaje de salida, donde cada valor está asociado
a una instancia de elementos de repetición como se muestra aquí:
<MRM>
<str1>abcde</str1>
<str1>fghij</str1>
<str1>12345</str1>
</MRM>
es de esperar que la siguiente sintaxis
ESQL funcione:
DECLARE D INTEGER;
SET D = CARDINALITY(InputBody.str1.*[]);
DECLARE M INTEGER 1;
WHILE M <= D DO
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
SET M = M + 1;
END WHILE;
Sin embargo, la sentencia:
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
requiere una copia de árbol, del origen al destino. Dado
que el elemento de destino aún no existe, la sentencia lo crea y se establecen el valor
y el tipo desde el origen.
Por consiguiente, para crear el mensaje de salida con el formato necesario,
dado un elemento de entrada que es de tipo
xsd:list,
utilice la
Función FIELDVALUE para recuperar de
forma explícita sólo el valor del elemento de origen:
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);