Subject: Re: [xsl] A challenge.. Group Periods of Data (1..5, 2..8, 4..9) (10..12; 10..14) From: Karl Stubsjoen <kstubs@xxxxxxxxx> Date: Wed, 4 May 2005 08:55:19 -0700 |
David, WOW! ... i'm still trying to figure out how it works ... So, can you explain? This is like magic.. I've been trying to figure it out, but can't. Things I don't get: 1) Variable e2 select. select="@period_end[. > $e]|$e[. >= current()/@period_end]" How does the pipe work here and is this only evaluating the current B element, or evaluating all @period_end(s)? 2) Right off the bat (first iteration), I don't understand how you determine the period attribute "ends" value. 3) Variable g select, what does this get you, the ancestor record? select="/.." 4) The copy of within the element period within the otherwise then the apply templates rule, it obviously creates the new <period/> element, but I don't see how your recursive template call inserts the "members", I don't get how you are preserving the member element of period. Thanks again. Karl On 5/4/05, David Carlisle <davidc@xxxxxxxxx> wrote: > > > using Dimitre's test file (which has sorted input) here's a simplish > pure xslt1 solution, no node set or other extensions. > > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > version="1.0"> > > <xsl:output indent="yes"/> > > <xsl:template match="A"> > <result> > <xsl:apply-templates select="B[1]"/> > </result> > </xsl:template> > > <xsl:template match="B"> > <xsl:param name="b" select="@period_begin"/> > <xsl:param name="e" select="@period_end"/> > <xsl:param name="g" select="/.."/> > <xsl:variable name="e2" select="@period_end[. > $e]|$e[. >= current()/@period_end]"/> > <xsl:choose> > <xsl:when test="../B[@period_begin <=$e2 and @period_end > $e2]"> > <xsl:apply-templates select="following-sibling::B[1]"> > <xsl:with-param name="b" select="$b"/> > <xsl:with-param name="e" select="$e2"/> > <xsl:with-param name="g" select="$g|."/> > </xsl:apply-templates> > </xsl:when> > <xsl:otherwise> > <period begins="{$b}" ends="{$e2}"> > <xsl:copy-of select="$g|."/> > </period> > <xsl:apply-templates select="following-sibling::B[1]"/> > </xsl:otherwise> > </xsl:choose> > </xsl:template> > > </xsl:stylesheet> > > > <A> > <B period_begin="1" period_end="5"/> > <B period_begin="2" period_end="7"/> > <B period_begin="3" period_end="10"/> > <B period_begin="4" period_end="12"/> > <B period_begin="14" period_end="16"/> > <B period_begin="16" period_end="20"/> > <B period_begin="16" period_end="30"/> > <B period_begin="32" period_end="33"/> > <B period_begin="33" period_end="38"/> > </A> > > $ saxon period.xml period.xsl > <?xml version="1.0" encoding="utf-8"?> > <result> > <period begins="1" ends="12"> > <B period_begin="1" period_end="5"/> > <B period_begin="2" period_end="7"/> > <B period_begin="3" period_end="10"/> > <B period_begin="4" period_end="12"/> > </period> > <period begins="14" ends="30"> > <B period_begin="14" period_end="16"/> > <B period_begin="16" period_end="20"/> > <B period_begin="16" period_end="30"/> > </period> > <period begins="32" ends="38"> > <B period_begin="32" period_end="33"/> > <B period_begin="33" period_end="38"/> > </period> > </result> > > ________________________________________________________________________ > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] A challenge.. Group Perio, David Carlisle | Thread | Re: [xsl] A challenge.. Group Perio, David Carlisle |
RE: [xsl] Extension Function with v, Touchtel | Date | RE: [xsl] XMPSpy and Xalan, Wendell Piez |
Month |