Bonjour à tous

Voici mon problème :

J'utilise une xsl qui créé un attribut "folio" à l’élément "niv1"
et lui donne la valeur de l'attribut "folio" du dernier élément "rp"

En plus de l'attribut "folio" dans "niv1" je voudrais aussi ajouter un deuxième attribut "id=niv1x", le x étant le rang d’apparition des éléments "niv1" dans le xml.

Avec cette xsl, si l’attribut "id=niv1x" est déjà présent dans "niv1" au moment de passer la xsl il est supprimé.

En résumé, j' ai ça :
<niv1><int>

Et je voudrais avoir ça :
<niv1 id="niv1xx" folio="x"><int>

(id="niv1xx" doit être numéroté 01,02… 10,11…)


Voici la xsl :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
 
    <!-- donner le @folio du rp précédent -->
    <xsl:template match="niv1">
        <xsl:copy>
            <xsl:attribute name="folio">
                <xsl:value-of select="preceding::rp[1]/@folio"/>
            </xsl:attribute>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
 
    <!-- tout le reste : copier tel que et appeler les templates des enfants -->
    <xsl:template match="*|@*">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
Merci d'avance pour vos réponses