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

Re: two-level grouping xslt 2.0

Subject: Re: two-level grouping xslt 2.0
From: Terry Ofner <tofner@xxxxxxxxxxx>
Date: Thu, 28 Feb 2008 13:54:08 -0500
Re:  two-level grouping xslt 2.0
Your two template rules work well. However, I think I have managed to misrepresent the problem--one of the main pitfalls of submitting queries, it seems.

The problem is this: The <story-title> element is the opening element of a "story" (as opposed the <story> element which is courtesy of the xhtml export from InDesign). At any rate, each "story" is composed of multiple elements such as <story>, <page>, and <imggroup>. That is why I am trying to execute a two-level grouping rule. The outer for- each-group should structure the <level1 class="unit"> hierarchy; the inner for-each-group should structure the <level2 class="selection">.

Here is another representation of the structure:

<book>
<bodymatter>
!--level1 opening element goes here-->
<story>
	<cluster_num>Cluster One</cluster_num>
</story>
<!--level2 opening element goes here-->
<story>
	<story-title>story one</story-title>
</story>
<story>
	<imggroup>image ref</imggroup>
</story>
<story>
	<pagenum>1</pagenum>
</story>
<story>
	<p></p>
	<p></p>
	<p></p>
</story>
<story>
	<p></p>
	<p></p>
	<p></p>
</story>
<!--level2 closing element goes here-->

<!--level2 opening element goes here-->
<story>
	<story-title>tory two</story-title>
</story>

<story>
	<p></p>
	<p></p>
	<p></p>
</story>
<story>
	<p></p>
	<p></p>
	<p></p>
</story>
<!--level2 closing element goes here-->
!--level1 closing element goes here-->


!--level1 opening element goes here--> <story> <cluster_num>Cluster Two</cluster_num> </story>

<!--multiple stories, poems, articles, etc.-->

</bodymatter>
</book>


Can I accomplish this using two separate rules? It seems to me that I have only seen such two-level grouping inside one template rule.


Terry

Terry Ofner
1541 Northbrook Drive
Indianapolis, IN 46260
Voice: 317-870-1992
Fax: 317-870-7101

tofner@xxxxxxxxxxx




On Feb 28, 2008, at 1:05 PM, Martin Honnen wrote:


Terry Ofner wrote:
Sorry about the poor xml of the input. It was way too long to include and my edit dropped off some closing </story> tags. I have tried to fix in the output and input below.

The following stylesheet groups by groups starting with story [cluster_num] and then simply processes the groups where story [story-title] have a special template wrapping those elements in a level2 element. That achieves the result you have described.



<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

<xsl:output method="xml" indent="yes"/>

<xsl:strip-space elements="*"/>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="bodymatter">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:for-each-group
        select="*"
        group-starting-with="story[cluster_num]">
          <level1 class="unit" unitnum="{position()}">
            <xsl:apply-templates select="current-group()"/>
          </level1>
      </xsl:for-each-group>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="story[story-title]">
    <level2 class="selection">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </level2>
  </xsl:template>

</xsl:stylesheet>
--

	Martin Honnen
	http://JavaScript.FAQTs.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.