Loop

www.altova.com Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Actions > If, Loop, Let, Try/Catch, Throw >

Loop

L'action Loop (voir capture d'écran ci-dessous) itère sur une séquence d'éléments que vous pouvez définir en utilisant les paramètres For Each et Break Loop If. Dans le cadre de la boucle, vous pouvez ensuite définir un ensemble d'actions à exécuter pendant chaque itération. Par exemple, dans la capture d'écran ci-dessous, une action Ajouter au nœud est exécutée pour chaque itération.

MTDLoop

La séquence sur laquelle la boucle itère est définie par les expressions XPath des paramètres For Each et Break Loop If. Les aspects principaux sont regroupés ci-dessous.

 

For Each : peut être une séquence nommée dans l'expression XPath (par exemple : 1 to 7) ou une séquence obtenue depuis une arborescence XML (par exemple : $XML1/Produits/Produit sélectionne une séquence de tous les éléments Produit dans l'arborescence $XML1 ; voir capture d'écran ci-dessus). Le paramètre For Each peut être spécifié avec ou sans le paramètre Break Loop If.
Break Loop If : cette expression XPath est évaluée avant chaque itération. Si l'expression évalue à true(), alors la boucle est terminée. Dans la capture d'écran ci-dessus, l'expression XPath Produit='' spécifie que la boucle sera terminée au moment de la rencontre du premier élément vide Produit. (Le nœud contextuel est Produits, donc le chemin localisateur relatif est valide.) Le paramètre Break Loop If peut être combiné avec le paramètre For Each comme dans la capture d'écran ci-dessus. En alternative, il peut également être spécifié seul.
Loop variable : la variable de boucle est la variable qui maintient l'élément de la séquence actuellement itérée. La variable de boucle est identifiée par un nom que vous pouvez saisir en cliquant tout d'abord après le symbole $ puis en saisissant le nom. Dans la capture d'écran ci-dessus, la variable de boucle est nommée MyLoop. Elle est référencée comme toute autre variable XPath, donc avec un signe $ précédant son nom ($MyLoop). La variable fera partie de la boucle ; cela signifie que vous ne pourrez pas référencer la variable dans une expression XPath se trouvant en dehors de la boucle. Dans la capture d'écran ci-dessus, la variable de boucle est référencée dans le paramètre Nouveau nœud de l'action Ajouter au nœud. C'est une référence valide puisque l'action Ajouter au nœud a été créée dans la boucle ; la variable est donc intégrée à ce moment.
Note :si la variable de boucle contient un ensemble de nœud (aussi appelé arborescence), cet ensemble de nœud est verrouillé et ne peut pas être modifié par des actions à l'intérieur de l'action Boucle. Dans la capture d'écran ci-dessus, les nouveaux nœuds ajoutés avec l'action Ajouter au nœud sont ajoutés à une autre arborescence XML ($XML2). Vous pouvez aussi modifier la séquence itérée comme suit : au lieu d'itérer directement au-dessus des nœuds, elle itère sur une séquence à nombre qui est liée à la séquence de nœud. Par exemple, au lieu d'itérer sur la séquence de nœuds Product dans l'exemple de la capture d'écran ci-dessus, nous pouvons itérer au-dessus d'une série de nombres liée à la séquence du nœud. L'expression XPath du paramètre For Each peut être passer de $XML1/Products/Product en for $i in 1 to count($XML1/Products/Product) return $i. Il s'agit d'une séquence de nombres qui est maintenant itérée. (Le nœud Product actuel dans le cadre de la boucle peut être accédé avec l'expression XPath :  $XML1/Products/Product[$i])

 

Les actions définies dans la capture d'écran ci-dessus créent une reproduction d'un fragment d'arborescence. Lors du chargement de la page, l'action Loop itère sur les éléments $XML1/Produits/Produit. Au cours de chaque itération, le nœud de produit actuel est stocké dans la variable MyLoop. Ce nœud Produit (dans la variable $MyLoop) est ensuite ajouté en tant que le dernier enfant du nœud $XML2/Produits. La boucle continue jusqu'à ce que le dernier élément Produit a été copié depuis $XML1/Produits à $XML2/Produits. Voir capture d'écran ci-dessous.

MTDLoopDataCopy

 


© 2019 Altova GmbH