xsl-list
[Top] [All Lists]

RE: Merging lines of 3 words or less

2005-09-08 09:34:51
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(_dot_)james(_at_)gmail(_dot_)com] 
Sent: 08 September 2005 11:41
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Merging lines of 3 words or less

On 9/8/05, David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk> 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="{(_at_)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




--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--