|
Subject: Re: [xsl] Algorithm for determining ranges From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 5 Jun 2026 14:56:51 -0000 |
On 05/06/2026 16:47, rick@xxxxxxxxxxxxxx wrote: > > Hi Martin, > > The last number is where the ranges should be. Thank you. > > > > I need to determine ranges, like this: > > <?xml version="1.0" encoding="UTF-8"?> > <xrefs> > B B B <xref>16.1.0</xref> > B B B <xref>16.2.1</xref> > B B B <range/> > B B B <xref>16.2.3</xref> > B B B <xref>16.14.2</xref> > B B B <xref>16.22.0</xref> > </xrefs> > > I am trying to determine an XSLT 3.0 algorithm for doing this. I > am looking for suggestions. Thank you in advance. > For the test sample B <xsl:template match="xrefs"> B B <xsl:copy> B B B <xsl:for-each-group select="xref" group-adjacent="let $numbers := tokenize(., '\.') ! xs:integer(.) return string-join(($numbers[position() lt last()], $numbers[last()] - position() + 1), '.')"> B B B B <xsl:choose> B B B B B <xsl:when test="current-group()[3]"> B B B B B B <xsl:sequence select="current-group()[1]"/> B B B B B B <range/> B B B B B B <xsl:sequence select="current-group()[3]"/> B B B B B </xsl:when> B B B B B <xsl:otherwise> B B B B B B <xsl:sequence select="current-group()"/> B B B B B </xsl:otherwise> B B B B </xsl:choose> B B B </xsl:for-each-group> B B </xsl:copy> B </xsl:template> would do. Not sure whether at some point e.g. 16.2.9 and 16.3.0 would form a range.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Algorithm for determining, rick@xxxxxxxxxxxxxx | Thread | Re: [xsl] Algorithm for determining, rick@xxxxxxxxxxxxxx |
| Re: [xsl] Algorithm for determining, rick@xxxxxxxxxxxxxx | Date | Re: [xsl] Algorithm for determining, rick@xxxxxxxxxxxxxx |
| Month |