Boolean true() and false() as strings?

Subject: Boolean true() and false() as strings?
From: "John E. Simpson" <simpson@xxxxxxxxxxx>
Date: Thu, 05 Oct 2000 16:17:54 -0400
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) &gt; 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



Current Thread