Comment casser une boucle for-each dans XSLT?
Comment casser une boucle for-each dans XSLT?
- Pourquoi voudriez-vous? Peut-être pour les uns n'est pas le construire vous voulez dans ce cas?
- Vous dites que le BREAK ne sont pas bonnes à tout?
- Que diriez-vous un exemple de code source XML à expliquer pourquoi vous avez besoin d'utiliser pour chaque? Il y a généralement une meilleure façon en utilisant le gabarit correspond.
- Non non, juste pour dire que le point de pour-chacun trouve à s'appliquer quelque chose dans une couverture moyen de chaque article, Si vous ne voulez pas de l'appliquer à chaque élément, puis c'est la mauvaise chose à utiliser.
Vous devez vous connecter pour publier un commentaire.
XSLT est écrit dans un très fonctionnelle de style, et dans ce style il n'y a pas d'équivalent d'un
break
déclaration. Ce que vous pouvez faire est quelque chose comme ceci:De cette façon, le
for-each
va encore parcourir tous les nœuds, mais le corps de la boucle ne sera exécutée que si la condition est vraie.Mettre la condition d'arrêt de la "boucle" dans le
select
attribut de lafor-each
élément. Par exemple, pour "casser" après quatre éléments:Pour itérer jusqu'à un nœud qui satisfait à certaines conditions particulières:
XSLT n'est pas une langue de la procédure; ne pense pas que de pour-chacun comme étant une "boucle" dans la façon dont vous avez une boucle en Java. Pour-chacun est un moyen pour appliquer un modèle à un tas d'éléments. Il ne doit pas nécessairement se produire dans un ordre particulier, de sorte que vous ne pouvez pas penser à elle comme "appliquer ce modèle à chaque de tout un tas d'éléments jusqu'à ce que tel-et-tel est le cas, alors stop".
Cela dit, vous pouvez utiliser l'attribut sélectionner pour filtrer les résultats, de sorte qu'il devient de plus en plus comme "appliquer un modèle à un tas d'éléments, mais seulement si une telle-et-telle est vrai d'entre eux".
Si ce que vous voulez vraiment est "appliquer un modèle à un tas d'éléments, dans telles et telles est vrai, mais seulement pour le premier, c'est vrai", vous pouvez combiner l'attribut sélectionner avec la fonction position ().
Une "pause" dans le corps d'un
<xsl:for-each>
XSLT instruction ne peut pas être spécifié à l'aide d'une construction syntaxique, cependant il peut être simulé.Cet extrait de code à topxml.com décrit la technique en détail:
Dans le cas où vous avez besoin d'un ""pause"" à partir d'une feuille de style xsl:for-each boucle
Essentiellement deux techniques sont discutées:
Exécution de quelque chose à l'intérieur du corps de
<xsl:for-each>
seulement si une condition est satisfaite.Précisant le traitement à l'aide de
<xsl:for-each>
mais avec la récursivitéLa seconde méthode a l'avantage d'être en mesure d'effectuer la sortie immédiatement, en contraste avec la première méthode d'avoir à toujours effectuer beaucoup de "vide cycles" même après la sortie-condition a été satisfaite.
Bonjour, je kwow c'est un vieux post, mais peut-être que ça peut aider d'autres développeurs. J'ai trouvé un moyen de briser un pour chaque XSLT il n'est pas littéralement une pause, mais si vous voyez le code que vous obtiendrez. Comme vous le savez ou ne le savez vous pouvez utiliser inline code C# dans xslt. Dans cet exemple, je veux boucle al les nœuds et prendre la première à NTE nœud avec la Valeur de RC, Mais si je reçois un nœud qui diffère de l'NTE nœud je veux arrêter de regarder l'état. J'ai donc définir une variable globale dans le code C# et je demander la valeur à chaque fois que je passe par un nœud:
J'ai eu une situation similaire, et voici le code que j'avais écrit. Pour des raisons de logique, je ne rentre pas dans les autres conditions avec condition01.
<xsl:choose>
est utilisé à la place de<xsl:if>
ici?