XSLT中的条件变量选择

时间:2013-10-02 14:36:20

标签: variables xslt xslt-2.0

如果值为数字,我希望变量具有元素的值,但如果不是,则我希望变量具有值0

换句话说,在XSLT中是否有以下简单的等价物?

var foobar = is_numeric(element value) ? element value : 0

或者你会怎么写这个?

<xsl:variable name="foobar" select=" ? " />

3 个答案:

答案 0 :(得分:10)

XPath 1.0:

<xsl:variable name="foobar">
  <xsl:choose>
    <xsl:when test="number($value) = number($value)">
      <xsl:value-of select="$value"/>
    </xsl:when>
    <xsl:otherwise>0</xsl:otherwise>
  </xsl:choose>
</xsl:variable>

这个聪明的number($value) = number($value)数字测试的参考:Dimitre Novatchev's answer"Xpath test if is number" question

答案 1 :(得分:7)

在XPath 2.0中,您可以使用&#34; castable as&#34;

<xsl:variable name="foobar" as="xs:double"
   select="if (x castable as xs:double) then x else 0" />

答案 2 :(得分:6)

您可以使用:

<xsl:variable name="x" 
              select="(ELEMENT[. castable as xs:double], 0)[1]"/>

<xsl:variable name="x" 
              select="sum(ELEMENT[. castable as xs:double])"/>