|
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 |