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:
   <MRM>
     <inner>abcde fghij 12345</inner>
   </MRM> 
where the element inner is of type 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:
   <MRM>
     <str1>abcde</str1>
     <str1>fghij</str1>
     <str1>12345</str1>
   </MRM> 
you might expect that the following ESQL syntax works:
   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:
	SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
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.
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]);