Bonjour,

Je cherche une méthode pour transformer un nombre romain en nombre arabe (Par exemple : IV en 4).

J'ai trouvé la méthode ci-dessous qui n'est pas très élégante (boucle itérative jusqu'à trouver la bonne valeur) et qui en plus a des limites suivant les processeurs lorsqu'on veut traduire des grands nombres romains (XSLT instruction stack overflow).

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:template name="RomanToInteger">
	<xsl:param name="roman_number"/>
	<xsl:param name="index"/>
	<xsl:variable name="temp">
		<xsl:call-template name="toRoman">
			<xsl:with-param name="value" select="$index"/>
		</xsl:call-template>
	</xsl:variable>
	<xsl:choose>
		<xsl:when test="$temp = $roman_number">
			<xsl:value-of select="$index"/>
		</xsl:when>
		<xsl:otherwise>
			<xsl:call-template name="RomanToInteger">
				<xsl:with-param name="roman_number" select="$roman_number"/>
				<xsl:with-param name="index" select="$index + 1"/>
			</xsl:call-template>
		</xsl:otherwise>
	</xsl:choose>
</xsl:template>
<xsl:template name="toRoman">
	<xsl:param name="value"/>
	<xsl:number value="$value" format="I"/>
</xsl:template>
Merci d'avance pour votre aide !