RE: [xsl] Is it possible to create xsl:sort from input parameters using XSLT 2.0 (Saxon)?

Subject: RE: [xsl] Is it possible to create xsl:sort from input parameters using XSLT 2.0 (Saxon)?
From: Nick Glenister <NGlenister@xxxxxxxxxxxxxxxx>
Date: Thu, 27 Jul 2006 14:32:56 +0100
Hi,

Thanks for the reply, it make perfect sense. I will try the following
instead which will limit me to a maximum of three sorts but is probably more
than enough in practice.

<xsl:for-each select="$tempRoot/product">
    <xsl:choose>
        <xsl:when test="boolean($sortField)=true">

            <xsl:sort select="$sortField/SortField[1]"
order="$sortField/SortField[1]/@Order"
data-type="$sortField/SortField[1]/@DataType"
case-order="$sortField/SortField[1]/@CaseOrder" />

            <xsl:sort select="$sortField/SortField[2]"
order="$sortField/SortField[2]/@Order"
data-type="$sortField/SortField[2]/@DataType"
case-order="$sortField/SortField[2]/@CaseOrder" />

            <xsl:sort select="$sortField/SortField[3]"
order="$sortField/SortField[3]/@Order"
data-type="$sortField/SortField[3]/@DataType"
case-order="$sortField/SortField[3]/@CaseOrder" />

        </xsl:when>
    </xsl:choose>
</xsl:for-each>


Cheers

Nick

-----Original Message-----
From: Huditsch, Roman (LNG-VIE) [mailto:Roman.Huditsch@xxxxxxxxxxxxx]
Sent: 27 July 2006 13:55
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: RE: [xsl] Is it possible to create xsl:sort from input
parameters using XSLT 2.0 (Saxon)?


Hi Nick,

As far as I can tell, it is not possible to generate <xsl:sort>
instructions that way, since the <xsl:sort>s in your example would only
apply to your inner for-each loop.
Is a two-pass solution also suitable for you?

best regards,
Roman

> -----Original Message-----
> From: Nick Glenister [mailto:NGlenister@xxxxxxxxxxxxxxxx]
> Sent: Thursday, July 27, 2006 1:01 PM
> To: 'xsl-list@xxxxxxxxxxxxxxxxxxxxxx'
> Subject: [xsl] Is it possible to create xsl:sort from input
> parameters using XSLT 2.0 (Saxon)?
>
> Hi,
>
> I am trying to create dynamic sorts in my XSLT file so the
> end user can select different fields to sort the data on then
> rerun the XSLT.
>
> The XSLT is called from a vb.net app where the chosen sort
> fields are passed as XML into a param called sortField:
>
> <SortFields>
>       <SortField DataType="number" CaseOrder="lowercasefirst"
> Order="ascending">lenderid</SortField>
>       <SortField DataType="number" CaseOrder="lowercasefirst"
> Order="ascending">generalproductid</SortField>
> </SortFields>
>
> Using the following XSL:
>
>       <xsl:for-each select="$tempRoot/product">
>               <xsl:choose>
>                       <xsl:when test="boolean($sortField)=true">
>                               <xsl:for-each
> select="$sortField/SortFields/SortField">
>                                       <xsl:sort select="."
> order="@Order"
> data-type="@DataType" case-order="@CaseOrder" />
>                               </xsl:for-each>
>
>                       </xsl:when>
>               </xsl:choose>
>       </xsl:for-each>
>
>
> which (in my head at least) would result in something akin too:
>
>       <xsl:for-each select="$tempRoot/product">
>               <xsl:sort select="lenderid" order="ascending"
> data-type="number" case-order="lowercasefirst"/>
>               <xsl:sort select="generalproductid" order="ascending"
> data-type="number" case-order="lowercasefirst"/>
>       </xsl:for-each>
>
>
> The main input XML document which is being transformed looks
> like this:
>
> <root>
>       <product>
>               <lenderid>1234</lenderid>
>               <generalproductid>12344321</genrealproductid>
>               <lendername>fred</lendername>
>                ...
>       </product>
>       <product>
>               ...
>       </product>
> </root>
>
>
> Having tried doing it I'm now pretty sure that this isn't
> possible as I get a compile error on the xsl:sort order as it
> is expecting ascending or descending.
>
> Is there any other way of achieving this?
>
>
> Cheers
>
> Nick
>
>
>
>
> The Investment, Life & Pensions Annual Awards Lunch 2006 will
> take place on Wednesday 20th September at The Brewery,
> Chiswell Street, London. To book your table or for more
> information, contact Miranda Siliprandi on 0870 2250 491 or
> email msiliprandi@xxxxxxxxxxxxxxxx
>
> The Moneyfacts 11th Annual Conference takes place on Tuesday
> 7th November 2006 at the Shaw Centre, Novotel Euston London
> in association with our Platinum Sponsors, CACI. For
> sponsorship and general enquires please email Anne Joyce at
> ajoyce@xxxxxxxxxxxxxxxx or to reserve your place, call our
> ticket hotline on 0870 2250 100.
>
> E-mail Disclaimer: This e-mail message contains confidential
> information and is intended only for the individual entity or
> organisation named. If you are not the named addressee you
> should not disseminate, distribute, print or copy this e-mail
> and/or attachments (either whole or partial). To do so may
> constitute a breach of confidence and/or privilege. Please
> notify the sender immediately by e-mail if you have received
> this e-mail by mistake and delete this e-mail permanently
> from your system. E-mail transmissions cannot be guaranteed
> to be secure or error-free as information could be
> intercepted, corrupted, lost, destroyed, maliciously altered,
> arrive late or incomplete, or contain viruses. The sender
> therefore does not accept liability for any errors or
> omissions in the contents of this message, which arise as a
> result of e-mail transmission. If verification is required
> please request a hard-copy version. Please note that any
> views or opinions presented in this e-mail are !
>  those of the author and do not necessarily represent those
> of Moneyfacts Group plc or their affiliates. Whilst every
> step is taken to ensure e-mails are virus free when they
> leave Moneyfacts Group systems, we accept no liability for
> any damage caused by any virus received.   This outbound
> message has been scanned for viruses by MailControl for
> Moneyfacts Group plc. 



This inbound message has been scanned for viruses by MailControl for
Moneyfacts Group plc.

Current Thread