Subject: RE: [xsl] Merging lines of 3 words or less From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 8 Sep 2005 17:34:51 +0100 |
You can read this as a special case of the following: <xsl:for-each-group select="line" group-starting-with="line[XXX]"> do group-heading <xsl:for-each select="current-group()"> process a line </xsl:for-each> do group-footing </xsl:for-each-group> Which means: process all the lines; before the first line and whenever you encounter one that satisfies XXX, produce a group heading; at the end of a group, produce a group footing. The value of current-group() is the set of lines making up the group you are processing at the time. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: James Cummings [mailto:cummings.james@xxxxxxxxx] > Sent: 08 September 2005 11:41 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Re: [xsl] Merging lines of 3 words or less > > On 9/8/05, David Carlisle <davidc@xxxxxxxxx> wrote: > > > > Your code looked OK, but I think it's easier with for-each group, > > basically you want to group adjacent lines together, > starting each group > > with a long line, you can express that directly: > > > > > > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> > > <xsl:template match="/"><xsl:apply-templates/></xsl:template> > > <xsl:template match="node()|@*" priority="-1"> > > <xsl:copy><xsl:apply-templates > select="node()|@*"/></xsl:copy> > > </xsl:template> > > <xsl:template match="lg"> > > <lg n="{@n}"> > > <xsl:for-each-group select="l" > group-starting-with="l[w[4]]"> > > <l n="{position()}"> > > <xsl:for-each select="current-group()"> > > <xsl:copy-of select="(node(),' ')"/> > > </xsl:for-each> > > </l> > > </xsl:for-each-group> > > </lg> > > </xsl:template> > > See that is a lot shorter and seems to even make sense. I tend to > still approach things in an XSLT1.0 sort of way. I'm always a bit > confused by xsl:for-each group. Here it is selecting lines and then > is saying that it starts with lines which have more than 4 words? > Then inside the recreated line for each of the current group (which is > what at this point?) it copies any node() under that? > > Well, at least my first attempt did work, even if it wasn't nearly so > elegant. :-( > > -James > > -- > James Cummings, Cummings dot James at GMail dot com
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Merging lines of 3 words , David Carlisle | Thread | Re: [xsl] Merging lines of 3 words , Joris Gillis |
Re: [xsl] How to do this without up, Mukul Gandhi | Date | Re: [xsl] custom xsl sorting, David Carlisle |
Month |