首页 > 解决方案 > 如何在 xslt 中一次检查字符串和数字

问题描述

我试图在 XSLT 中一次检查字符串和数字。然后我收到以下错误。

无法将字符串“n/a”转换为双精度

输入 :

<table>
  <tr>
    <td>0</td>
    <td>n/a</td>
    <td>3</td>
  </tr>
  <tr>
    <td>3</td>
    <td>7</td>
    <td>n/a</td>
  </tr>
</table>

尝试过 XSLT 代码:

<xsl:template match="table/tr">
  <xsl:choose>
    <xsl:when test="td[2] > 0">
      <xsl:value-of select="format-number(td[2] * 100,'0.00')"/>
    </xsl:when>
    <xsl:when test="td[2] = 'n/a'">
      <xsl:value-of select="'-'"/>
    </xsl:when>
    <xsl:when test="td[2] = 0">
      <xsl:value-of select="'-'"/>
    </xsl:when>
  </xsl:choose>
</template>

我怎样才能解决这个问题?我正在使用 XSLT 2.0

标签: xmlxslt

解决方案


最简单的解决方案是首先对“n/a”进行测试——这样如果失败,该值必须是一个数字(或者至少我们假设如此):

<xsl:choose>
    <xsl:when test="td[2] = 'n/a'">
      <xsl:value-of select="'-'"/>
    </xsl:when>
    <xsl:when test="td[2] > 0">
      <xsl:value-of select="format-number(td[2] * 100,'0.00')"/>
    </xsl:when>
    <xsl:when test="td[2] = 0">
      <xsl:value-of select="'-'"/>
    </xsl:when>
</xsl:choose>

推荐阅读