Subject: RE: [xsl] Trouble grouping with for-each-group and sort From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 17 Mar 2010 18:11:14 -0000 |
I can't immediately see the answer, but I can see the problem: <xsl:for-each-group select="current-group()" group-by="myns:E"> <xsl:sort select="current-grouping-key()" data-type="number"/> <xsl:sort select="myns:G/myns:sub3/myns:inner" data-type="number"/> The second sort key is only used when two things have the same primary sort key. But by definition each group has a different current-grouping-key, so this will never happen (remember at this level you are sorting the groups, not the content of a particular group). I suspect that you want to use the second sort key to sort the contents of current-group(). > > <xsl:call-template name="process-data" > > <xsl:with-param name="data-set" > select="current-group()"/> > </xsl:call-template> > You could do that within the process-data template, or you could do <xsl:variable name="temp" as="item()"> <xsl:perform-sort select="current-group()"> <xsl:sort select="myns:G/myns:sub3/myns:inner" data-type="number"/> and then pass the variable to the template. Regards, Michael Kay http://www.saxonica.com/ http://twitter.com/michaelhkay > -----Original Message----- > From: mlcook@xxxxxxxxxx [mailto:mlcook@xxxxxxxxxx] > Sent: 17 March 2010 17:58 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Trouble grouping with for-each-group and sort > > I have a collection of data that I'm trying to sort, but am > having difficulty with the for-each-group and sort operations. > > The data is a series of elements of the form: > > <DataItem xmlns="myns"> > <A>2</A> > <B>1</B> > <C>6</C> > <D>4</D> > <E>740</E> > <F>99</F> > <G> > <sub1>202</sub1> > <sub2>0</sub2> > <sub3> > <inner>1.1</inner> > </sub3> > </G> > <H> > <sub1>202</sub1> > <sub2>262</sub2> > <sub3> > <inner>1.15</inner> > </sub3> > </H> > </DataItem> > > > where <G> and <H> have the same kind of data with the same > sub-element names. > > The variable $list contains lots of DataItem elements. > > Here's my current grouping and sorting attempt (from a larger > transformation): > > <xsl:for-each-group select="$list/myns:DataItem" > group-by="myns:A"> > <xsl:sort select="current-grouping-key()" data-type="number"/> > > <xsl:for-each-group select="current-group()" > group-by="myns:B"> > <xsl:sort select="current-grouping-key()" > data-type="number"/> > > <xsl:for-each-group select="current-group()" > group-by="myns:C"> > <xsl:sort select="current-grouping-key()" > data-type="number"/> > > <xsl:for-each-group select="current-group()" > group-by="myns:D"> > <xsl:sort select="current-grouping-key()"/> > > <xsl:for-each-group select="current-group()" > group-by="myns:E"> > <xsl:sort select="current-grouping-key()" > data-type="number"/> > <xsl:sort select="myns:G/myns:sub3/myns:inner" > data-type="number"/> > > <xsl:call-template name="process-data" > > <xsl:with-param name="data-set" > select="current-group()"/> > </xsl:call-template> > > </xsl:for-each-group> > </xsl:for-each-group> > </xsl:for-each-group> > </xsl:for-each-group> > </xsl:for-each-group> > > > When I run the transformation, all the groupings from the > for-each-group operations work fine. but the data is not sorted (it > appears) at the innermost grouping according to the value of > "myns:G/myns:sub3/myns:inner" when the "process-data" > template is invoked. > > All the other data is grouped and sorted fine, except for the > last sort on "inner". > > Any ideas why the last sort doesn't appear to work? > > Does a data-type of "number" for sorting correctly process > numbers with decimal points? > > Am I using the wrong select on the parameter for process-data? > > Is current-group() at that point not the sorted data that I > think it should be? > > Is there a limit on nested for-each-group operations? > > I'm using Oxygen 10.3 with Saxon SA 9.1.0.7. > > Thanks, Mike > > This email and any attachments are only for use by the > intended recipient(s) and may contain legally privileged, > confidential, proprietary or otherwise private information. > Any unauthorized use, reproduction, dissemination, > distribution or other disclosure of the contents of this > e-mail or its attachments is strictly prohibited. If you > have received this email in error, please notify the sender > immediately and delete the original.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Trouble grouping with for-eac, mlcook | Thread | Re: [xsl] Trouble grouping with for, G. Ken Holman |
[xsl] Trouble grouping with for-eac, mlcook | Date | Re: [xsl] Trouble grouping with for, G. Ken Holman |
Month |