xsl-list
[Top] [All Lists]

RE: complex sorting

2002-09-06 10:34:10
This should parse the numeric value and sort, which it does 
fine, except that all the attributes are stripped off the output.

<xsl:template match ="I1/@* |I1">
      <xsl:if test="I1/@i44='N'">
              <xsl:copy>
                      <xsl:apply-templates select="@* | I1">
                              <xsl:sort select="@i29" 
data-type="number" order="descending"/>
                      </xsl:apply-templates>
              </xsl:copy>
</xsl:if>
</xsl:template>

Atrtibute nodes will match the above template rule but fail the <xsl:if>
test, so they will produce no output.

I need to perform a different sort if test ='Y' for the same 
attribute node, moving the entire record to another section 
of the document.  that would look something like this.


You may need to use the substring() trick: 

concat(substring(@i44, 1 div (test='N')), 
       substring(@i25, 1 div (test='Y'))

If test='Y' this is
concat(subtring(@i44, infinity), substring(@i25, 0))
which is string(@i25)

while if test='N' it is string(@i44). 

Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com 


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