[XSL] Problème d'incrémentation
Voici en gros ce que j'ai côté XML :
Code:
1 2 3 4 5
|
<Personnes>
<Personne Type="Adulte" Nombre="2"/>
<Personne Type="Enfant" Nombre="5"/>
</Personnes> |
et le XML que je doit obtenir :
Code:
1 2 3 4 5 6 7 8
|
<Personne id="1" Type="ADULTE"/>
<Personne id="2" Type="ADULTE"/>
<Personne id="3" Type="ENFANT"/>
<Personne id="4" Type="ENFANT"/>
<Personne id="5" Type="ENFANT"/>
<Personne id="6" Type="ENFANT"/>
<Personne id="7" Type="ENFANT"/> |
En XSL, j'ai une fonction, enfin template :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
<xsl:template name="for.loop.persons">
<xsl:param name="start"/>
<xsl:param name="total"/>
<xsl:param name="Type"/>
<xsl:if test="$start <= $total">
<Personne>
<xsl:attribute name="id">
<xsl:value-of select="$start"/>
</xsl:attribute>
<xsl:attribute name="Type">
<xsl:value-of select="$Type"/>
</xsl:attribute>
</Personne>
</xsl:if>
<xsl:if test="$start <= $total">
<xsl:call-template name="for.loop.persons">
<xsl:with-param name="start">
<!-- Increment index-->
<xsl:value-of select="$start + 1"/>
</xsl:with-param>
<xsl:with-param name="total">
<xsl:value-of select="$total"/>
</xsl:with-param>
<xsl:with-param name="Type">
<xsl:value-of select="$Type"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template> |
Et voilà l'endroit où je traite cela :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<xsl:template match="Voyage/Personnes">
<xsl:for-each select="Personne">
<xsl:call-template name="for.loop.persons">
<xsl:with-param name="start">
1
</xsl:with-param>
<xsl:with-param name="total">
<xsl:value-of select="@Nombre"/>
</xsl:with-param>
<xsl:with-param name="Type">
<xsl:for-each select="@Type">
<xsl:value-of select="translate(.,$LowerLetters,$UpperLetters)"/>
</xsl:for-each>
</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template> |
Le problème est que j'obtiens :
Code:
1 2 3 4 5 6 7 8
|
<Personne id="1" Type="ADULTE"/>
<Personne id="2" Type="ADULTE"/>
<Personne id="1" Type="ENFANT"/>
<Personne id="2" Type="ENFANT"/>
<Personne id="3" Type="ENFANT"/>
<Personne id="4" Type="ENFANT"/>
<Personne id="5" Type="ENFANT"/> |
Je sais que c'est parceque je donne 1 en paramètre d'entrée de start, je sais que ça vient d'un mauvais passage de paramètres, mais j'ai essayé avec position(), en faisant des opérations du style position() + (position()-1) qui ne marche pas toujours....
Bref, là je sature :P :lol: :cry: