[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] XSLT 1 and grouping numbers by if the following number is current number + 1 and so on


Subject: Re: [xsl] 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


Current Thread
Keywords