|
Subject: Re: [xsl] Algorithm for determining ranges From: "rick@xxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 5 Jun 2026 17:33:45 -0000 |
I did have to change this <xsl:sequence select="current-group()[3]"/> to this <xsl:sequence select="current-group()[last()]"/> Because the ranges might include more than 3 numbers. From: Martin Honnen martin.honnen@xxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Sent: Friday, June 5, 2026 10:57 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Algorithm for determining ranges On 05/06/2026 16:47, rick@xxxxxxxxxxxxxx <mailto: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> <xref>16.1.0</xref> <xref>16.2.1</xref> <range/> <xref>16.2.3</xref> <xref>16.14.2</xref> <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 <xsl:template match="xrefs"> <xsl:copy> <xsl:for-each-group select="xref" group-adjacent="let $numbers := tokenize(., '\.') ! xs:integer(.) return string-join(($numbers[position() lt last()], $numbers[last()] - position() + 1), '.')"> <xsl:choose> <xsl:when test="current-group()[3]"> <xsl:sequence select="current-group()[1]"/> <range/> <xsl:sequence select="current-group()[3]"/> </xsl:when> <xsl:otherwise> <xsl:sequence select="current-group()"/> </xsl:otherwise> </xsl:choose> </xsl:for-each-group> </xsl:copy> </xsl:template> would do. Not sure whether at some point e.g. 16.2.9 and 16.3.0 would form a range. XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/612310> (by email <> )
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Algorithm for determining, Martin Honnen martin | Thread | |
| Re: [xsl] Algorithm for determining, Martin Honnen martin | Date | |
| Month |