[XSLT] Remise à zéro numérotation
Bonjour,
j'ai un fichier XML sous la forme avec des lignes :
Code:
1 2 3 4 5 6 7 8 9
| <Lignes>
<ref>A</ref>
</lignes>
<Lignes>
<ref>A</ref>
</lignes>
<Lignes>
<ref>B</ref>
</lignes> |
à partir de cela, j'arrive à obtenir en sortie un fichier texte qui regroupe certaines lignes en fonction de <ref>.
Fichier texte en sortie :
Code:
1 2 3 4 5
| Entete 1
Ligne 1 ref A
Ligne 2 ref A
Entete 2
Ligne 3 ref B |
Je souhaiterais numéroter les lignes. J'ai essayé d'utiliser number mais je n'arrive pas à remettre à zéro la numérotation. Pour la ligne 3, je voudrais en fait avoir ligne 1 au lieu de ligne 3 car je recommence une nouvelle entete.
Je ne vois pas comment faire.
Merci
solution avec following-sibling::LIGNE
Une idée parmi d'autres sans doute serait d'écrire un template récursif qui serait appellé sur le noeud <LIGNE> suivant (avec following-sibling::LIGNE) en passant en paramètre le compteur.
Ca pourrait ressembler à:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<xsl:template name="Compte_ligne" >
<xsl:param name="noeud" />
<xsl:param name="cpt" />
<xsl:choose>
<xsl:when test="empty($noeud)" >
</xsl:when>
<xsl:when test="not(empty($noeud))" >
<xsl:text>LIGNE </xsl:text>
<xsl:value-of select="$cpt" >
...
<xsl:value-of select="$noeud" >
<xsl:call-template name="Compte_ligne" />
<xsl:with-param name= "noeud" select="$noeud/following-sibling::LIGNE" />
<xsl:with-param name= "cpt" select="$cpt+1" />
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template> |
Bon courage.
PS : l'utilisation de la fonction 'empty' est à vérifier