[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] To simulate SORT inside a xsl:choose condition


Subject: Re: [xsl] To simulate SORT inside a xsl:choose condition
From: Greg Faron <gfaron@xxxxxxxxxxxxxxxxxx>
Date: Mon, 29 Apr 2002 16:38:42 -0600

At 04:15 PM 4/29/2002, you wrote:
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?

I think the answer depends on what the tests are (e.g. What is $prevnode?). If your test is based on some value of the nodes selected by the for-each, then you're asking to re-order everything after you get and test the first item. This is not good. The workaround here is to select items based on that value in the original for-each selection.


If, on the other hand, your tests are based on some external value, it's pretty easy. You just create multiple for-each's and only execute the one you need.
<xsl:choose>
<xsl:when test="$prevnode='criteriavalue1'">
<xsl:for-each select="somenode">
<xsl:sort order="ascending" select="node_to_be_sorted"/>
</xsl:for-each>
</xsl:when>
<xsl:when test="$prevnode='criteriavalue2'">
<xsl:for-each select="somenode">
<xsl:sort order="descending" select="other_node_to_be_sorted"/>
</xsl:for-each>
</xsl:when>
</xsl:choose>



Greg Faron Integre Technical Publishing Co.



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



Current Thread