Copying data between a list and a repeating element
This task shows how to copy data from a list into a repeating element by using ESQL.
About this task
Consider the form of the following XML input message:
where the element inner is of type
<MRM> <inner>abcde fghij 12345</inner> </MRM>
xsd:list, and therefore has three associated string values, rather than a single value.
To copy the three values into an output message, where each value is associated with an instance of repeating elements as shown here:
you might expect that the following ESQL syntax works:
<MRM> <str1>abcde</str1> <str1>fghij</str1> <str1>12345</str1> </MRM>
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;
However, the statement:
requests a tree copy from input to output. Because the output element does not yet exist, the statement creates it, and its value and type are set from the input.
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
Therefore, to create the output message with the required format, given an input element which is of type
xsd:list, use the FIELDVALUE function to explicitly retrieve only the value of the input element:
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);