增加XSL 1.0中的字母

时间:2014-11-05 14:38:47

标签: xslt converter letters-and-numbers

我从XML中获取字符串“AA” 我需要增加它像:

  

AA AB AC AD AE(...)AZ BA BB(...)

例如,将其增加35次(来自变量称为(`xsl:变量名=“NumIncr”>))从AA开始并在BG中结束。 字符串并不总是“AA”可以是任何2个字母......

有什么想法吗?! 我认为<xsl:number>标签可以提供帮助,但仍然存在从字母传递到数字的问题。

需要像

这样的东西
<fo:table-cell border-collapse="collapse" border-color="gray" font-family="Helvetica" font-size="8pt" border="solid 1pt gray" padding="1pt" display-align="before">                                                                                             
     <fo:block text-align="center">                                                                                             
          <xsl:value-of select="string($Sequence)"/>
     </fo:block>    
</fo:table-cell>

其中$ sequence是AA AB AC(...) 可以在同一个单元格中写入evrything,问题不在于输出而是用于增加AA的模板

HELP !!!

1 个答案:

答案 0 :(得分:1)

要将"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"/>
相关问题