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

Re: Different behaviour for the first item in a for-e

Subject: Re: Different behaviour for the first item in a for-each-group
From: Martin Honnen <Martin.Honnen@xxxxxx>
Date: Sat, 31 Oct 2009 19:31:11 +0100
Re:  Different behaviour for the first item in a  for-e
Mark Wilson wrote:

I have a working template that I need to modify. At the moment, as it iterates through the for-each-group, every group (Title) is treated identically. I need to provide a different behavior The first group will be wrapped by a row/cell with the "keep "property, all others in a non-"keep" property row/cell. The current template is in Listing 1, my attempt to modify it in listing 2. Before I bollix everything up, would someone look it over and tell me if I have done it right or if there is a better way?

<xsl:template name="format-article">
<xsl:for-each-group select="../Article" group-by="Title">
<xsl:sort select="Title"/>
<xsl:sort select="Year"/>
<xsl:sort select="IssueNumber" data-type="number"/>
<xsl:sort select="Page"/>
<!-- Put the first citation in a keeping row-->
<xsl:for-each select="current-group()">
<xsl:choose>
<xsl:when test="current-group()[1]">
<fo:table-row keep-with-previous="always">
<fo:table-cell>
<fo:block xsl:use-attribute-sets="citation">
<fo:wrapper xsl:use-attribute-sets="title">
<xsl:apply-templates select="Title"/>
</fo:wrapper>
<xsl:apply-templates select="Person"/>
<!--and for each citation-->
<xsl:apply-templates select="current-group()" mode="format"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:when>
<xsl:otherwise>
<fo:table-row>
<fo:table-cell>
<!--and put all the other citations in one a non-keeping row-->
<fo:block xsl:use-attribute-sets="citation">
<fo:wrapper xsl:use-attribute-sets="title">
<xsl:apply-templates select="Title"/>
</fo:wrapper>
<xsl:apply-templates select="Person"/>
<xsl:apply-templates select="current-group()" mode="format"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>

Inside of the for-each-group position() will give you the "number" of the group being processed thus if you want to treat the first group differently then I think you want


<xsl:template name="format-article">
       <xsl:for-each-group select="../Article" group-by="Title">
           <xsl:sort select="Title"/>
           <xsl:sort select="Year"/>
           <xsl:sort select="IssueNumber" data-type="number"/>
           <xsl:sort select="Page"/>


<xsl:choose>
<xsl:when test="position() eq 1">
<fo:table-row keep-with-previous="always">
<fo:table-cell>
<fo:block xsl:use-attribute-sets="citation">
<fo:wrapper xsl:use-attribute-sets="title">
<xsl:apply-templates select="Title"/>
</fo:wrapper>
<xsl:apply-templates select="Person"/>
<!--and for each citation-->
<xsl:apply-templates select="current-group()" mode="format"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:when>
<xsl:otherwise>
<fo:table-row>
<fo:table-cell>
<!--and put all the other citations in one a non-keeping row-->
<fo:block xsl:use-attribute-sets="citation">
<fo:wrapper xsl:use-attribute-sets="title">
<xsl:apply-templates select="Title"/>
</fo:wrapper>
<xsl:apply-templates select="Person"/>
<xsl:apply-templates select="current-group()" mode="format"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>


       </xsl:for-each-group>
   </xsl:template>

--

	Martin Honnen
	http://msmvps.com/blogs/martin_honnen/

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.