This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Boolean true() and false() as strings?
- To: xsl-list at mulberrytech dot com
- Subject: Boolean true() and false() as strings?
- From: "John E. Simpson" <simpson at polaris dot net>
- Date: Thu, 05 Oct 2000 16:17:54 -0400
- Reply-To: xsl-list at mulberrytech dot com
A curious thing (well, to me!)... consider this template rule:
<xsl:template match="sales">
<h2>Regions Selling More than 300 Units:</h2>
<xsl:for-each select="region">
<xsl:variable name="units_gt_300">
<xsl:choose>
<xsl:when test="number(units) > 300">
<xsl:value-of select="true()"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="false()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="$units_gt_300='true'">
<h3><xsl:value-of select="concat(@name, ' (', units, ' units)')"/></h3>
</xsl:if>
</xsl:for-each>
</xsl:template>
Note the assignment of Boolean true() or false() to the variable, and the
<xsl:if> test. Why can't the latter be simply:
<xsl:if test="$units_gt_300">
i.e., why the need to test vs. the string value "true"? Does using the
true() and false() functions in a variable coerce their return values to
string type rather than their "native" Boolean?
Here's a simple XML doc to run it against:
<sales quarter="2001-01">
<region name="Northeast">
<units>374</units>
<amount>12500.26</amount>
</region>
<region name="Southeast">
<units>512</units>
<amount>17692</amount>
</region>
<region name="Southwest">
<units>161</units>
<amount>8349.72</amount>
</region>
<region name="Northwest">
<units>465</units>
<amount>15239.6</amount>
</region>
</sales>
(Tested with both Saxon and the Sept. release of IE5.5, btw.)
==========================================================
John E. Simpson | "Curiosity killed the cat,
http://www.flixml.org | but for a while I was a
XML Q&A: http://www.xml.com | suspect." (Steven Wright)
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list