Subject: RE: [xsl] To simulate SORT inside a xsl:choose condition From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Tue, 30 Apr 2002 08:47:01 +0100 |
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: [xsl] 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] To simulate SORT inside a, Greg Faron | Thread | RE: [xsl] To simulate SORT inside a, Dion Houston |
Re: [xsl] To simulate SORT inside a, Joerg Heinicke | Date | RE: [xsl] Accessing nodes via varia, Michael Kay |
Month |