Copie de zones répétitives

Vous pouvez configurer un noeud avec ESQL pour copier des zones répétitives de plusieurs manières.

A propos de cette tâche

Considérez un message XML d'entrée qui contient une structure répétitive:

...
	<Field_top>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
			<field1></field1>
	</Field_top>
.....

Vous ne pouvez pas copier la totalité de cette zone de structure avec l'instruction suivante:

SET OutputRoot.XMLNS.Output_top.Outfield1 = InputRoot.XMLNS.Field_top.field1;

Cette instruction copie uniquement la première répétition et produit donc le même résultat que cette instruction:

SET OutputRoot.XMLNS.Output_top.Outfield1[1] = InputRoot.XMLNS.Field_top.field1[1];

Vous pouvez copier les champs dans une boucle, en contrôlant les itérations avec la CARDINALITÉ de la zone d'entrée:

SET I = 1;
SET J = CARDINALITY(InputRoot.XMLNS.Field_top.field1[]);
WHILE  I <= J DO
	SET OutputRoot.XMLNS.Output_top.Outfield1[I] = InputRoot.XMLNS.Field_top.field1[I];
	SET I = I + 1;
END WHILE;

Cela peut être approprié si vous souhaitez modifier chaque zone du message de sortie lorsque vous la copiez à partir de la zone d'entrée (par exemple, ajoutez-y un nombre ou pliez son contenu en majuscules), ou une fois qu'elle a été copiée. Si le message de sortie contenait déjà plus de zones Field1 que le message d'entrée, les zones excédentaires ne sont pas modifiées par la boucle et restent dans le message de sortie.

L'instruction unique suivante copie les itérations des champs d'entrée dans les champs de sortie et supprime les champs excédentaires dans le message de sortie.

SET OutputRoot.XMLNS.Output_top.Outfield1.[] = InputRoot.XMLNS.Field_top.field1[];

L'exemple suivant montre comment vous pouvez renommer les éléments lorsque vous les copiez dans l'arborescence de sortie. Cette instruction ne copie pas le nom de l'élément source ; par conséquent, chaque élément field1 devient un élément Target .

SET OutputRoot.XMLNS.Output_top.Outfield1.Target[] = 
    (SELECT I FROM InputRoot.XMLNS.Field_top.field1[] AS I );

L'exemple suivant montre une manière différente d'effectuer la même opération ; il produit le même résultat final.

SET OutputRoot.XMLNS.Output_top.Outfield2.Target[] 
              = InputRoot.XMLNS.Field_top.field1[];  

L'exemple suivant copie le nom de l'élément source. Chaque élément field1 est conservé en tant qu'élément field1 sous l'élément Target .

SET OutputRoot.XMLNS.Output_top.Outfield3.Target.[] 
              = InputRoot.XMLNS.Field_top.field1[];  

Cet exemple est une autre façon d'obtenir le même résultat, avec des éléments field1 créés sous l'élément Target .

SET OutputRoot.XMLNS.Output_top.Outfield4.Target.*[] 
              = InputRoot.XMLNS.Field_top.field1[];

Ces exemples montrent qu'il existe plusieurs façons de coder ESQL pour copier des zones répétitives de la source vers la cible. Sélectionnez la méthode la plus appropriée pour obtenir les résultats dont vous avez besoin.

Les principaux affichés ici s'appliquent également à toutes les zones de l'arborescence de messages dans lesquelles vous pouvez écrire des données, et pas seulement à l'arborescence de messages de sortie.