xsl-list
[Top] [All Lists]

Sorting on call-template value... solutions provided... (RIP)

2003-04-14 21:46:28
Raj,

Okay.  I don't understand what is so unclear about this.  I want to be able
to create a user-defined transformation function for sorting purposes.  It
is already possible to do this with intrinsic xpath functions.  For example,
I can do something like this:

<xsl:for-each select="//name">
    <xsl:sort select="substring-after(.,'-')"/>
    ... do my processing here ...
</xsl:for-each>

Instead of using intrinsic functions such as substring-after as shown above,
I want to be able to create my own transformation function directly in XSLT
using a template defined for the purpose.  That is a straightforward
concept, although I may not be articulating it well.

A gentleman named Dimitre Novatchev already explained that there is a way to
do this in XSLT 2.0 using xsl:function, but that you cannot do this directly
in XSLT 1.0, and he supplied a pointer to an alternative technique which can
be used with XSLT 1.0.

http://www.biglist.com/lists/xsl-list/archives/200303/msg00007.html

Another gentelman named Mike Brown supplied a pointer to another technique
that involves the use of extension functions, which are part of exslt.  This
technique would use features of XSLT that go beyond the defined standard.

http://exslt.org/func/elements/function/index.html

Question asked.  Question answered.  Thanks to all for your input.  May this
topic rest in peace.

Randy Oxentenko


----- Original Message -----
From: "Avula, Raj" <ravula(_at_)firstam(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Monday, April 14, 2003 9:17 PM
Subject: RE: [xsl] Sorting on call-template value?



I don't understand your explanation on why it does not work.

The value returned from call-template would
presumably vary for every possible node in the "for-each" list
NO. Value is being assigned to the variable out side for-each block.
It is just being used inside for-each.


The example
shown below would have a single value for the variable "sortkey".  It
would
not be very useful unless it could be different for each node in

Can you explain this better. May be I am missing something here.
Sorting will be done basically on one attribute or element. What do you
mean
by different for each node.




-----Original Message-----
From: Randy Oxentenko [mailto:randy(_at_)oxentenko(_dot_)com]
Sent: Sunday, April 13, 2003 12:08 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Sorting on call-template value?


I don't think that would work.  The value returned from call-template
would
presumably vary for every possible node in the "for-each" list.  The
example
shown below would have a single value for the variable "sortkey".  It
would
not be very useful unless it could be different for each node in
"/some/nodes".

Thanks,

Randy Oxentenko

----- Original Message -----
From: "Mike Brown" <mike(_at_)skew(_dot_)org>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Sunday, April 13, 2003 1:58 PM
Subject: Re: [xsl] Sorting on call-template value?


Randy Oxentenko wrote:
I am a novice with XSLT.  My question is with respect to the child of
<xsl:for-each> that is <xsl:sort>.  Is it possible to use a result
returned
from <xsl:call-template> as the sort key?

Perhaps a better way to phrase the question might be this: You can
sort
on
the value of functions intrinsic to XSL, such as position() or
substring-before() etc.  Is it possible to write your own "functions"
as
xsl
templates, and sort on the value returned from those?

Use a variable?

<xsl:variable name="sortkey">
  <xsl:call-template name="foo"/>
</xsl:variable>
<xsl:for-each select="/some/nodes">
  <xsl:sort select="string($sortkey)"/>
  ...


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list