Subject: Re: XSLT 1 and grouping numbers by if the following number is current number + 1 and so on
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Mon, 24 Mar 2014 14:25:47 +0000
|
Use sibling recursion:
<xsl:template match="a" mode="new-group">
<group>
<xsl:apply-templates select="following-sibling::a[1][. = current()+1]"
mode="same-group"/>
</group>
<xsl:apply-templates select="following-sibling::a[not(. =
preceding-sibling::a+1)][1]" mode="new-group"/>
</xsl:template>
<xsl:template match="a" mode="same-group">
<xsl:apply-templates select="following-sibling::a[1][. = current()+1]"
mode="same-group"/>
</xsl:template>
<xsl:template match="*[a]">
<xsl:apply-templates select="child::a[1]" mode="new-group"/>
</xsl:template>
Not tested.
Michael Kay
Saxonica
On 24 Mar 2014, at 14:08, Mario Madunic <mario.madunic@xxxxxxxxxxxx> wrote:
> (using XSLT 1)
> Hi,
>
> I would like to group numbers by if the following number is current number +
1 and so on.
>
> Example:
>
> <a>1</a>
> <a>3</a>
> <a>4</a>
> <a>5</a>
> <a>7</a>
> <a>9</a>
> <a>10</a>
>
> <group><a>1</a></group>
> <group><a>3 <a>4</a> <a>5</a></group>
> <group><a>7</a></group>
> <group><a>9</a> <a>10</a></group>
>
> Any insight will be appreciated.
>
> Thanks
>
> Mario Madunic | Software Developer | AeroInfo Systems, A Boeing Company |
mario.madunic@xxxxxxxxxxxx | #200-13575 Commerce Parkway | Richmond, BC, V6V
2L1, Canada | www.aeroinfo.com | www.boeing.com
|