This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Cascading Attributes?
- To: "XSL Mailing List (E-mail)" <xsl-list at lists dot mulberrytech dot com>
- Subject: [xsl] Cascading Attributes?
- From: William Bagby <williamb at adone dot com>
- Date: Fri, 25 May 2001 11:50:01 -0400
- Reply-To: xsl-list at lists dot mulberrytech dot com
I have an XML element <text> with an optional attribute @class. In the
template matching this element, I'd like to have a variable $class which
takes one of the following values, with lower number taking precedence:
1. a param called class passed to the template using <with-param>
2. optional attribute @class if it is defined
3. the string "none"
In other words, if my XSL is:
<xsl:apply-templates select="text"/>
I want $class to be text/@class if it is defined, otherwise "none". But if
my XSL is:
<xsl:variable name="myvar">myclass</xsl:variable>
<xsl:apply-templates select="text">
<xsl:with-param name="myvar"/>
</xsl:apply-templates>
I want $class to be "myclass", regardless of whether or not @class is
defined.
I tried the following:
<xsl:template match="text">
<xsl:param name="class">
<xsl:choose>
<xsl:when test="@class"><xsl:value-of
select="@class"/></xsl:when>
<xsl:otherwise>none</xsl:otherwise>
</xsl:choose>
</xsl:param>
<a href="{@href}" class="{$class}"><xsl:value-of select="."/></a>
</xsl:template>
But it doesn't work. I'm sure I could probably figure it out, but I'm
looking for something elegant, or at least something easy to read. Maybe
what I really want to know is why my XSL doesn't work, which is really
another way of asking, "How does <xsl:param> work?"
William Bagby.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list