Considere
o formato da seguinte mensagem de entrada XML:
<MRM>
<inner>abcde fghij 12345</inner>
</MRM>
em que o elemento interno é de tipo
xsd:list,
e, portanto, possui três valores de cadeia associados, em vez de um único valor.
Para
copiar três valores para uma mensagem de saída, na qual cada valor está associado
a uma instância de elementos de repetição, conforme mostrado aqui:
<MRM>
<str1>abcde</str1>
<str1>fghij</str1>
<str1>12345</str1>
</MRM>
você pode esperar que a seguinte sintaxe 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;
No entanto, a instrução:
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];
solicita uma cópia da árvore da origem para o destino. Como o elemento de destino
ainda não existe, a instrução cria-o e seu valor e tipo
são configurados a partir da origem.
Portanto, para criar a mensagem de saída com o formato
necessário, especificado um elemento de entrada que seja de tipo
xsd:list,
utilize a
Função FIELDVALUE para recuperar explicitamente
apenas o valor do elemento de origem:
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);