XSL实现16进制转成10进制

前几天写个样式文件,有个需要将16进制转成10进制,使用模板实现该功能:

 

转换函数:

<xsl:template name="HEXTONUM">
   <xsl:param name="str"/>
   <xsl:param name="sum"/>
   <xsl:param name="pos"/>  
   <xsl:variable name="dec">
     <xsl:call-template name="HextoDec">
       <xsl:with-param name="hexnum" select= "substring($str,number($pos),1)"/>
     </xsl:call-template>
   </xsl:variable>
  <xsl:if test="$pos &gt; string-length($str)">
    <xsl:value-of select="$sum"/>   
  </xsl:if> 
  <xsl:if test="$pos &lt;= string-length($str)">    
    <xsl:call-template name="HEXTONUM">
     <xsl:with-param name="str"><xsl:value-of select="$str"/> </xsl:with-param>   
      <xsl:with-param name="sum"><xsl:value-of select="number($sum)*16+$dec"/></xsl:with-param>
      <xsl:with-param name="pos"><xsl:value-of select="number($pos)+1"/></xsl:with-param>
    </xsl:call-template>
  </xsl:if> 
</xsl:template>

<xsl:template name="HextoDec">
   <xsl:param name="hexnum"/>
    <xsl:choose>
     <xsl:when test="$hexnum='0'">
        <xsl:value-of select="0"/>
     </xsl:when>
     <xsl:when test="$hexnum='1'">
        <xsl:value-of select="1"/>
     </xsl:when>
      <xsl:when test="$hexnum='2'">
        <xsl:value-of select="2"/>
     </xsl:when>
     <xsl:when test="$hexnum='3'">
        <xsl:value-of select="3"/>
     </xsl:when>
     <xsl:when test="$hexnum='4'">
        <xsl:value-of select="4"/>
     </xsl:when>
     <xsl:when test="$hexnum='5'">
        <xsl:value-of select="5"/>
     </xsl:when>
      <xsl:when test="$hexnum='6'">
        <xsl:value-of select="6"/>
     </xsl:when>
     <xsl:when test="$hexnum='7'">
        <xsl:value-of select="7"/>
     </xsl:when>
     <xsl:when test="$hexnum='8'">
        <xsl:value-of select="8"/>
     </xsl:when>
     <xsl:when test="$hexnum='9'">
        <xsl:value-of select="9"/>
     </xsl:when>
      <xsl:when test="$hexnum='A' or $hexnum='a'">
        <xsl:value-of select="10"/>
     </xsl:when>
     <xsl:when test="$hexnum='B' or $hexnum='b'">
        <xsl:value-of select="11"/>
     </xsl:when>
     <xsl:when test="$hexnum='C' or $hexnum='c'">
        <xsl:value-of select="12"/>
     </xsl:when>
     <xsl:when test="$hexnum='D' or $hexnum='d'">
        <xsl:value-of select="13"/>
     </xsl:when>
      <xsl:when test="$hexnum='E' or $hexnum='e'">
        <xsl:value-of select="14"/>
     </xsl:when>
      <xsl:when test="$hexnum='F' or $hexnum='f'">
        <xsl:value-of select="15"/>
     </xsl:when>  
</xsl:choose>  
</xsl:template> 

 

调用方法:

  <xsl:call-template name="HEXTONUM">
      <xsl:with-param name="str">FFFF</xsl:with-param>
      <xsl:with-param name="sum">0</xsl:with-param>
      <xsl:with-param name="pos">1</xsl:with-param>
  </xsl:call-template> 

 

举一反三,通过这种方式可以在XSL中实现一些较为复杂的转换逻辑,实现该功能可能有其他更好的方法,欢迎大家提出改进意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值