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 34 35 36 37 38 39 40 41 42 43 44 45 46
|
<xsl:template match="node()">
<xsl:param name="parentRef" select="0" />
<xsl:variable name="pos"><xsl:number level="any" count="*[local-name()!='val' and not(@ref) and not(@reference)]" /></xsl:variable>
<xsl:copy>
<!-- l'attribut @class doit apparaître en première position -->
<xsl:copy-of select="@class" />
<!-- ajout d'un attribut @id séquenciel -->
<xsl:if test="local-name()!='val' and not(@ref) and not(@reference)">
<xsl:attribute name="id"><xsl:value-of select="$pos - 1" /></xsl:attribute>
</xsl:if>
<!-- l'attribut @parent sera remplacé par un noeud ci-dessous -->
<xsl:copy-of select="@*[local-name()!='class' and local-name()!='parent']" />
<xsl:if test="local-name()='md'">
<xsl:element name="po">
<xsl:attribute name="class">p</xsl:attribute>
<xsl:attribute name="ref"><xsl:value-of select="$parentRef" /></xsl:attribute>
</xsl:element>
</xsl:if>
<!-- un certain ordre doit être respecté pour les balises -->
<xsl:apply-templates select="vi|dc|md|t">
<xsl:with-param name="parentRef"><xsl:value-of select="$pos - 1" /></xsl:with-param>
</xsl:apply-templates>
<xsl:if test="@parent">
<xsl:element name="pa">
<xsl:attribute name="ref"><xsl:value-of select="$parentRef" /></xsl:attribute>
</xsl:element>
</xsl:if>
<xsl:apply-templates select="*[local-name()!='vi' and local-name()!='dc' and local-name()!='md' and local-name()!='t']">
<xsl:with-param name="parentRef"><xsl:value-of select="$pos - 1" /></xsl:with-param>
</xsl:apply-templates>
</xsl:copy>
<xsl:if test="local-name()='vp'">
<xsl:element name="vc">
<xsl:attribute name="class">V</xsl:attribute>
<xsl:attribute name="ref"><xsl:value-of select="$pos - 1" /></xsl:attribute>
</xsl:element>
</xsl:if>
</xsl:template> |
Partager