Subject: Re: [xsl] A challenge.. Group Periods of Data (1..5, 2..8, 4..9) (10..12; 10..14) From: David Carlisle <davidc@xxxxxxxxx> Date: Wed, 4 May 2005 13:03:20 +0100 |
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, Karl Stubsjoen | Thread | Re: [xsl] A challenge.. Group Perio, Karl Stubsjoen |
Re: [xsl] A challenge.. Group Perio, Dimitre Novatchev | Date | Re: [xsl] XSL-FO / XSLT Transformat, craig webber |
Month |