Like xsl:if instructions, xsl:when
elements can have more elaborate
contents between their start- and
end-tags—for example, literal result
elements, xsl:element elements, or
even xsl:if and xsl:choose elements—to
add to the result tree. Their test
expressions can also use all the
tricks and operators that the xsl:if
element's test attribute can use, such
as and, or, and function calls, to
build more complex boolean
expressions.
Maybe this is a no-brainer for the xslt-professional, but for me at beginner/intermediate level, this got me puzzled. I wanted to do exactly the same thing, but I had to test a responsetime value from an xml instead of a plain number. Following this thread, I tried this:
<xsl:when test="responsetime/@value >= 5000 and responsetime/@value <= 8999">
which generated an error. This works:
<xsl:when test="number(responsetime/@value) >= 5000 and number(responsetime/@value) <= 8999">
Don't really understand why it doesn't work without number(), though. Could it be that without number() the value is treated as a string and you can't compare numbers with a string?
Anyway, hope this saves someone a lot of searching...
Not quite, the AND has to be lower-case.
From XML.com:
It does have to be wrapped in an <xsl:choose> since it's a when. And lowercase the "and".
Maybe this is a no-brainer for the xslt-professional, but for me at beginner/intermediate level, this got me puzzled. I wanted to do exactly the same thing, but I had to test a responsetime value from an xml instead of a plain number. Following this thread, I tried this:
which generated an error. This works:
Don't really understand why it doesn't work without number(), though. Could it be that without number() the value is treated as a string and you can't compare numbers with a string?
Anyway, hope this saves someone a lot of searching...