|
Subject: Re: [xsl] effecient inline multi-conditional testing From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Tue, 20 Nov 2001 15:35:27 +0000 |
Hi Jeff,
> here's the task:
> -create a template to cast an overloaded boolean value
I'd probably use separate variables for boolean true and boolean
false, perhaps based on the $cast parameter, and then return the
appropriate one of those, so something like:
<xsl:template name="cast:boolean">
<xsl:param name="b-value" />
<xsl:param name="cast" select="'true-false'" />
<xsl:variable name="true" select="substring-before($cast, '-')" />
<xsl:variable name="false" select="substring-after($cast, '-')" />
<xsl:choose>
<xsl:when test="$b-value = 'true' or $b-value = 't' or
$b-value = 'yes' or $b-value = 'y' or
$b-value = 1">
<xsl:value-of select="$true" />
</xsl:when>
<xsl:when test="$b-value = 'false' or $b-value = 'f' or
$b-value = 'no' or $b-value = 'n' or
$b-value = 0">
<xsl:value-of select="$false" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
ERROR: Invalid boolean value '<xsl:value-of select="$b-value" />'
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Another option is to store all the possible 'true' and 'false' values
in an XML structure that you can then test against. For example:
<values type="boolean-true">
<value>true</value>
<value>t</value>
<value>yes</value>
<value>y</value>
<value>1</value>
</values>
<values type="boolean-false">
<value>false</value>
<value>f</value>
<value>no</value>
<value>n</value>
<value>0</value>
</values>
You could then store the relevant value elements in $boolean-trues and
$boolean-falses variables using your preferred method (document('') or
node-set() function, or use XSLT 1.1), and test against them:
<xsl:template name="cast:boolean">
<xsl:param name="b-value" />
<xsl:param name="cast" select="'true-false'" />
<xsl:variable name="true" select="substring-before($cast, '-')" />
<xsl:variable name="false" select="substring-after($cast, '-')" />
<xsl:choose>
<xsl:when test="$b-value = $boolean-trues">
<xsl:value-of select="$true" />
</xsl:when>
<xsl:when test="$b-value = $boolean-falses">
<xsl:value-of select="$false" />
</xsl:when>
<xsl:otherwise>
<xsl:message terminate="yes">
ERROR: Invalid boolean value '<xsl:value-of select="$b-value" />'
</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Or something similar.
Cheers,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] effecient inline multi-condit, Jeff Beadle | Thread | Re: [xsl] effecient inline multi-co, David Carlisle |
| Re: [xsl] character entities, David Carlisle | Date | [xsl] additional question: FO subsc, Tanzila Mohammad |
| Month |