我是xslt的新手,到目前为止,我尝试使用十六进制的递归功率模板如下:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:text> </xsl:text>
<xsl:call-template name="hexapow">
<xsl:with-param name="i" select = "pow" />
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="hexapow">
<xsl:param name="i"/>
<xsl:param name="index" select="$i - 1"/>
<xsl:param name="pow" select="1"/>
<xsl:choose>
<xsl:when test="$i > 0">
<xsl:call-template name="hexapow">
<xsl:with-param name="i" select="$index"/>
<xsl:with-param name="pow" select="format-number(format-number($pow,'#') * 16, '#')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$pow"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
如果我将它与以下xml一起使用
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<pow>2</pow>
</cd>
</catalog>
对于pow = 1到pow = 13,我得到了正确答案。
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<pow>14</pow>
</cd>
</catalog>
(pow = 14),我得到72057594037927946而不是72057594037927936(来自计算器)。相差10 !!
为什么?
我需要将六角值e.x A00000000000000000001转换为十进制。