[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Merging lines of 3 words or less

Subject: RE: Merging lines of 3 words or less
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 8 Sep 2005 17:34:51 +0100
merging words to produce names
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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.