[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: To simulate SORT inside a xsl:choose condition
The most powerful solutions unfortunately require extensions. There's xx:evaluate(): <xsl:for-each select="....."> <xsl:sort select="xx:evaluate($sort-key)"/> and there's stylesheet-defined functions (here in XSLT 2.0 syntax): <xsl:for-each select="....."> <xsl:sort select="xx:my-function($sort-key)"/> ... <xsl:function name="xx:my-function"> <xsl:param name="sort-key"/> ... Within XSLT 1.0 though there are a number of tricks that can be useful. There's the exclusive union trick: <xsl:sort select="key1[condition1] | key2[condition2] | key3[condition3]"/> where only one of the conditions is actually true. There's also the dynamic name trick: <xsl:sort select="*[name()=$param]"/> and of course if the worst comes to the worst you can always write <xsl:choose> <xsl:when test="condition1"> <xsl:for-each select="$x"> <xsl:sort select="sort-key-1"/> <xsl:call-template name="the-work"/> </xsl:for-each> </xsl:when> <xsl:when test="condition2"> <xsl:for-each select="$x"> <xsl:sort select="sort-key-2"/> <xsl:call-template name="the-work"/> </xsl:for-each> </xsl:when> ... XSLT 2.0 also introduces a sort() function that takes a named sort key as a parameter, which can be determined at run-time: <xsl:for-each select="sort($x, if (condition1) then 'sortkey1' else 'sortkey2')"> Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of KUMAR > NINGASHETTY > Sent: 29 April 2002 23:15 > To: < > Subject: To simulate SORT inside a xsl:choose condition > > > Hi all , > > I know that the rule to sort should be immediately after > <xsl:for-each > > I am in a situation where i have to read the criteria to > sort from some some node in the beginning of XML > and based on which i need to make a decision to sortBY > corresponding node somewhere down the line.... > > > But as you know the following way doesnt work ... > > <xsl:for-each select="somenode"> > <xsl:choose> > <xsl;when test="$prevnode = 'criteriavalue' "> > <xsl:sort order="ascending" > select="node_to_be_sorted"/> > </xsl:when> > </xsl:choose> > > </xsl:for-each> > > Note: dont worry about syntax check on this ... > > Is there a way to sneak around and get this Sorting to work > based on some criteria ...Or any other work arounds, suggestions? > > thanx in advance > - kumar > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|