incrémenter le compteur en XSLT 1.0
C'est le XML d'entrée:
<Move-Afile>
<Afile>
<Item>
<PackNumber>1234</PackNumber>
</Item>
<Item>
<PackNumber>567</PackNumber>
</Item>
<Item>
<PackNumber>567</PackNumber>
</Item>
<Item>
<PackNumber>126</PackNumber>
</Item>
<Item>
<PackNumber>876</PackNumber>
</Item>
</Afile>
</Move-Afile>
<Item>
est une utilisation illimitée de l'élément qui contient <PackNumber>
comme un élément enfant. Pour chaque nombre de pack nous avons besoin d'incrémenter la variable compteur, mais ici, une seule condition est présent comme si précédentes <PackNumber>
est égal à l'actuel <PackNumber>
nous avons à ignorer le compteur (il n'est pas nécessaire d'incrémenter) comme ci-dessous de sortie.
À l'intérieur de la for-each
, peut-on obtenir le compteur ci-dessous XSLT échantillon?
C'est mon XSLT modèle
<xsl:template match="/">
<A>
<target>
<xsl:for-each select="/inp1:Move-Afile/inp1:Afile/inp1:Item/inp1:PalletNumber">
<xsl:variable name="count">
<!-- get the count here-->
</xsl:variable>
<counter>$count</counter>
<PNumber><xsl:value-of select="."/></PNumber>
</xsl:for-each>
</target>
</A>
</xsl:template>
C'est la sortie XML:
<A>
<target>
<Item>
<counter>1</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>1234</PNumber>
</Item>
<Item>
<counter>2</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>567</PNumber>
</Item>
<Item><!-- if previous <PackNumber> is equal to current <PackNumber> ignore the count-->no need to increment
<PNumber>567</PNumber>
</Item>
<Item>
<counter>3</counter><!-- if previous <PackNumber> is not equal to current <PackNumber> increment the count-->
<PNumber>126</PNumber>
</Item>
<Item><!-- if previous <PackNumber> is equal to current <PackNumber> ignore the count-->no need to increment
<PNumber>126</PNumber>
</Item>
</target>
</A>
XML de sortie 2:
<?xml version="1.0"?>
<A>
<target>
<counter>1</counter>
<PNumber>1234</PNumber>
<counter>2</counter>
<PNumber>567</PNumber>
<!-- IF PNumber is equal we have to ignore the Total loop -->
<counter>3</counter>
<PNumber>126</PNumber>
<counter>4</counter>
<PNumber>876</PNumber>
</target>
</A>
OriginalL'auteur sum | 2013-05-12
Vous devez vous connecter pour publier un commentaire.
Mise à jour selon le changement de la question:
obtenir le nombre ici (à l'intérieur d'une boucle for each variable)
Essayez ceci:
Mise À Jour Sortie:
Sûr pas de problème, mais que vous avez toujours un nombre en sortie.
ok,pas de problème.u peut pls modifier cela.
veuillez vérifier les output2 laquelle j'ai ajouté ci-dessus.
si PNumber est égal, nous avons d'ignorer la boucle comme ci-dessus output2.....u peut pls modifier cela.
OriginalL'auteur hr_117
Ici est une courte et très efficace de la solution, en utilisant Muenchian groupement:
Lorsque cette transformation est appliquée sur le document XML:
le voulait, résultat correct est produit:
OriginalL'auteur Dimitre Novatchev
Si le résultat que vous avez besoin est ce que vous montrez dans votre deuxième exemple XML, ensuite cette feuille de style est tout ce dont vous avez besoin.
Il n'est de copier le
PackNumber
à partir de seulement ceuxItem
éléments qui n'ont pas de précédent correspondantPackNumber
.Le nombre est calculé comme l'un de plus que le nombre de précédents
Item
éléments qui n'ont aucune correspondance prédécesseur.sortie
Je n'ai pas de problème avec votre réponse, sauf qu'elle est un peu longue haleine. Je pense aussi que vous avez été trop souple à coopérer avec tous les caprices de l'OP.
OriginalL'auteur Borodin
Plutôt que d'utiliser la variable de compteur et de tenter d'incrémenter sa valeur à chaque fois (Qui de toute façon ne va pas se passer comme les variables dans xsl sont en fait des constantes), essayez d'utiliser
position()
, qui peut fonctionner comme un unique incrémentation de l'identificateur. Voici un exemple de la syntaxe à l'aide deposition()
:OriginalL'auteur inProgress