This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: complex sorting
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Fri, 6 Sep 2002 18:34:10 +0100
- Subject: RE: [xsl] complex sorting
- Reply-to: xsl-list at lists dot mulberrytech dot com
> 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.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list