|
Subject: Re: [xsl] preceding-sibling after sort gives unexpected result From: "J.Pietschmann" <j3322ptm@xxxxxxxx> Date: Thu, 11 Sep 2003 19:45:38 +0200 |
I am trying to process a document similar to the one below, using the stylesheet below. My problem is that after I have performed the sort, I appear to get the preceding sibling in the original document order rather than in the newly sorted order.
That's exactly how the preceding-sibling axis is supposed to work. If you want to reference the preceding node in the sorted sequence, you have several options: - Use a two stage approach, by copying the sorted nodes into a variable. You'll need a node-set() extension function to further fork on the data: <xsl:variable name="sorted-stuff"> <sorted-stuff> <xsl:for-each select="$stuff-to-be-sorted"> <xsl:sort select="my-sort-key"/> <xsl:copy-of select="."/> </xsl:for-each> </sorted-stuff> </xsl:variable> <xsl:for-each select="xx:node-set($sorted-stuff)/sorted-stuff"> ... Use with caution if your data set is very large.
- Access the previous element by index. You'll need to sort the
selected stuff again. This is a sort of brute force approach,
use with caution in all cases:
<xsl:for-each select="$stuff-to-be-sorted">
<xsl:variable mname="this-index" select="position()"/>
<xsl:text>Previous: </xsl:text>
<xsl:for-each select="$stuff-to-be-sorted">
<if test="position()=$this-index - 1">
<xsl:value-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>- Do some analysis whether you can determine the previous node in the sorted sequence by some other method.
- Use an XSLT 2.0 processor. Check the spec for details, specifically the sort() XPath 2.0 function.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] preceding-sibling after sort , Kaine Varley | Thread | RE: [xsl] preceding-sibling after s, Michael Kay |
| [xsl] How to split table colums ove, Barry van Weldam | Date | Re: [xsl] How to split table colums, J.Pietschmann |
| Month |