La especificación de esquema XML permite que un elemento o atributo contenga una lista de valores basándose en un tipo simple con los valores individuales separados por espacios en blanco.
<message1> <listE1 listAttr="one two three"> four five six</listE1> </message1>
En el árbol de mensaje resultante, se representa un tipo xsd::list como un nodo de nombre con un hijo de valor anónimo para cada elemento de la lista. Esto permite manejar las listas de repetición sin ninguna pérdida de información.
MRM listEl (Name) listAttr (Name) "one" (Value) "two" (Value) "three" (Value) "four" (Value) "five" (Value) "six" (Value)
SET OutputRoot.MRM.listEl.listAttr.*[3] = ...modifica el tercer elemento de listAttr.
<MRM> <inner>abcde fghij 12345</inner> </MRM>donde el elemento inner es del tipo xsd::list, por lo que tiene tres valores de serie de caracteres asociados, en lugar de un solo valor.
<MRM> <str1>abcde</str1> <str1>fghij</str1> <str1>12345</str1> </MRM>es razonable suponer que la siguiente sintaxis ESQL funciona:
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;
SET OutputRoot.MRM.str1[M] = InputBody.inner.*[M];requiere una copia de árbol, del origen al destino. Se crea el elemento de destino, puesto que todavía no existe, y su valor y tipo se establecen desde el origen.
Esto es coherente con el comportamiento de ESQL en otros sitios, pero en el caso de elementos que tienen valores del tipo list, este código puede generar errores falsos de validación.
SET OutputRoot.MRM.str1[M] = FIELDVALUE(InputBody.inner.*[M]);