J'ai un XML comme ceci:augmentation automatique conditionnelle dans xsl
<V>
<W>
<X>1</X>
</W>
<W>
<Y>1</Y>
</W>
<W>
<X>1555</X>
</W>
<W>
<X>1</X>
</W>
</V>
Je veux faire quelque chose comme ceci:
<entity ID="start">
<f ID="NewField">0001</f>
<f ID="NewField">0001</f>
<f ID="NewField">0002</f>
<f ID="NewField">0003</f>
</entity>
Lorsque le champ est V/W/X alors NewField
devrait être incrémenté de 1 autant de fois que l'étiquette V/W/X est trouvée. De même pour V/W/Y.
Le XSL que je me sers est
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<entity ID="start">
<xsl:for-each select="V/W">
<xsl:if test="X">
<xsl:variable name="my_var">
<xsl:value-of select="concat('000',position())"/>
</xsl:variable>
<f ID="NewField"><xsl:value-of select="$my_var"/></f>
</xsl:if>
<xsl:if test="Y">
<xsl:variable name="my_var">
<xsl:value-of select="concat('000',position())"/>
</xsl:variable>
<f ID="NewField"><xsl:value-of select="$my_var"/></f>
</xsl:if>
</xsl:for-each>
</entity>
</xsl:template>
</xsl:stylesheet>
mais il me donne un mauvais résultat, quelque chose comme ceci:
<entity ID="start">
<f ID="NewField">0001</f>
<f ID="NewField">0002</f>
<f ID="NewField">0003</f>
<f ID="NewField">0004</f>
</entity>
Par curiosité, est-il une raison particulière pour laquelle vous utilisez le ' parent :: 'axe explicitement (qui par définition n'a jamais plus qu'un nœud) plutôt que' ..' - il semble que ce soit un peu ambigu. –
Vous avez raison, ''..' 'est le même, et je le sais. Je le fais parce que pour moi c'est plus expressif. Lors de la lecture du XPath, la structure du document anticipé est claire instantanément, tandis que ''..' 'laisse un reste d'ambiguïté. – Tomalak