[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Default attribute value templates

Subject: Re: Default attribute value templates
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Wed, 27 Jun 2001 13:28:40 -0700 (PDT)
default attribute value
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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.