要将字符串"AA"
转换为其数值,可以使用以下模板:
<xsl:template name="string-to-num">
<xsl:param name="string"/>
<xsl:param name="alpha" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:param name="magnitude" select="1"/>
<xsl:param name="carryover" select="0"/>
<xsl:param name="bit" select="substring($string, string-length($string), 1)"/>
<xsl:param name="bit-value" select="string-length(substring-before($alpha, $bit)) + 1"/>
<xsl:variable name="return" select="$carryover + $bit-value * $magnitude"/>
<xsl:choose>
<xsl:when test="string-length($string) > 1">
<xsl:call-template name="string-to-num">
<xsl:with-param name="string" select="substring($string, 1, string-length($string) - 1)"/>
<xsl:with-param name="magnitude" select="string-length($alpha) * $magnitude"/>
<xsl:with-param name="carryover" select="$return"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$return" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
调用模板的一些示例:
<xsl:call-template name="string-to-num">
<xsl:with-param name="string">A</xsl:with-param>
</xsl:call-template>
返回 1;
<xsl:call-template name="string-to-num">
<xsl:with-param name="string">Z</xsl:with-param>
</xsl:call-template>
返回 26;
<xsl:call-template name="string-to-num">
<xsl:with-param name="string">AA</xsl:with-param>
</xsl:call-template>
返回 27;
<xsl:call-template name="string-to-num">
<xsl:with-param name="string">ZZ</xsl:with-param>
</xsl:call-template>
返回 702;
<xsl:call-template name="string-to-num">
<xsl:with-param name="string">AAA</xsl:with-param>
</xsl:call-template>
返回 703。
这些结果正好相反:
<xsl:number value="$return" format="A"/>