This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Default attribute value templates
- To: tcn at melvaig dot co dot uk
- Subject: [xsl] Re: Default attribute value templates
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- Date: Wed, 27 Jun 2001 13:28:40 -0700 (PDT)
- Cc: xsl-list at lists dot mulberrytech dot com
- Reply-To: xsl-list at lists dot mulberrytech dot com
Trevor Nash wrote:
> Is there a way of specifying via an attribute value template (or
> similar mechanism) that the attribute is absent?
>
> Example:
> I have a template which matches a specific element, then does an
> apply-templates with a sort. The application is supposed to be fairly
> generic, so it seems a nice idea to allow those attributes of sort
> which are attribute value templates to be parameterized thus:
>
> <xsl:template match="x">
> <xsl:apply-templates>
> <xsl:sort order="{@order}" ... />
> </xsl:apply-templates>
> </xsl:template>
>
> The problem is, given <x>...</x> the transformation fails "order must
> be ascending or descending".
>
> I can see how I could handle this by substituting appropriate values
> when the attribute is mising, but
> a) it would involve hard wiring the default values, which would be
> bad news if they ever changed
> b) it seems inordinately messy
> c) I don't think it would always behave identically if for example
> the input is <x order="">...</x> : becuase some processors might take
> this as 'use the default', others will reject it.
>
> Have I missed anything?
Hi Trevor,
MSXML does not signal an error and interprets the lack of @order or an empty string
value of @order exactly as you wanted -- the whole AVT is discarded and no "order"
attribute is specified.
I wonder if this is not a bug in MSXML 4.
Otherwise, one solution to your problem is the following:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="x">
<xsl:choose>
<xsl:when test="@order and (@order = 'ascending'
or @order = 'descending')">
<xsl:apply-templates>
<xsl:sort order="{@order}"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates>
<xsl:sort/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Hope this helped.
Cheers,
Dimitre Novatchev.
__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list