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

Re: Merging nested/adjacent nodes

Subject: Re: Merging nested/adjacent nodes
From: chris <oneskiingfool@xxxxxxxxx>
Date: Thu, 19 May 2005 18:22:52 -0600
chris bovy
Most excellent..  Thank you both for your help.  I tried a hundred
different variations of something similar but you somehow hit the nail
on the head.... even though I left an important piece out.  What I
failed to mention is that, in that example, I wanted to *only* merge
the <supervisor> nodes.  So your output is exactly what I was looking
for, but I didnt' include an important component in my examples
(multiple <employee> nodes with the same name, not to be merged).
Fortunately, your code did the bulk of the work and it only took me a
minute to modify it to the following (I may find some holes in it
later, but it seems to be working for now)...

<xsl:template name="m" match="*|/">
<xsl:param name="c" select="*"/>
<xsl:for-each-group select="$c" group-adjacent="self::supervisor/@name
| self::employee">
<xsl:choose>
<xsl:when test="current-group[1]/self::superviser">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:call-template name="m">
<xsl:with-param name="c" select="current-group()/*"/>
</xsl:call-template>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="current-group()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:template>

On 5/19/05, David Carlisle <davidc@xxxxxxxxx> wrote:
>
> Turns out that this is simpler than it looks, simpler than I thought it
> was going to be anyway. Powerful voodoo this for-each-group stuff....
>
>
> emp.xsl:
>
> <xsl:stylesheet
>   version="2.0"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> >
>
> <xsl:output indent="yes"/>
> <xsl:strip-space elements="*"/>
>
>
> <xsl:template name="m" match="*|/">
> <xsl:param name="c" select="*"/>
> <xsl:for-each-group select="$c" group-adjacent="string(@name)">
> <xsl:copy>
> <xsl:copy-of select="@*"/>
> <xsl:call-template name="m">
>  <xsl:with-param name="c" select="current-group()/*"/>
> </xsl:call-template>
> </xsl:copy>
> </xsl:for-each-group>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> emp.xml
>
> <employees>
>        <supervisor name="jimmy">
>                <supervisor name="bob">
>                        <employee name="grunt_1"/>
>                </supervisor>
>        </supervisor>
>        <supervisor name="jimmy">
>                <supervisor name="bob">
>                        <employee name="grunt_2"/>
>                </supervisor>
>        </supervisor>
>        <supervisor name="jimmy">
>                <employee name="grunt_3"/>
>        </supervisor>
>        <employee name="grunt_4"/>
>        <supervisor name="jimmy">
>                <supervisor name="bob">
>                        <employee name="grunt_5"/>
>                </supervisor>
>        </supervisor>
> </employees>
>
>
>
> $ saxon8 emp.xml emp.xsl
> <?xml version="1.0" encoding="UTF-8"?>
> <employees>
>   <supervisor name="jimmy">
>      <supervisor name="bob">
>         <employee name="grunt_1"/>
>         <employee name="grunt_2"/>
>      </supervisor>
>      <employee name="grunt_3"/>
>   </supervisor>
>   <employee name="grunt_4"/>
>   <supervisor name="jimmy">
>      <supervisor name="bob">
>         <employee name="grunt_5"/>
>      </supervisor>
>   </supervisor>
> </employees>
>
>
> ________________________________________________________________________
> This e-mail has been scanned for all viruses by Star. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ________________________________________________________________________

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.