XSLT中的条件变量选择

Svi*_*ish 8 xslt variables xslt-2.0

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

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

var foobar = is_numeric(element value) ? element value : 0
Run Code Online (Sandbox Code Playgroud)

或者你会怎么写这个?

<xsl:variable name="foobar" select=" ? " />
Run Code Online (Sandbox Code Playgroud)

kjh*_*hes 12

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>
Run Code Online (Sandbox Code Playgroud)

这个聪明的number($value) = number($value)数字测试的参考: Dimitre Novatchev"Xpath测试是否是数字"问题的回答.


Ian*_*rts 7

在XPath 2.0中,你可以使用" castable as"

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


Mic*_*Kay 6

你可以使用:

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

要么

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