Subject: Re: [xsl] Re: Seeking an elegant XSLT function to check that a pair of numeric ranges are consecutive From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sun, 26 May 2024 15:31:15 -0000 |
On Sun, May 26, 2024 at 7:15b/AM Roger L Costello costello@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > Another mind-blowing solution. This one from Michael Kay: > > <!-- > Determine if the ranges in $seq are consecutive. > $seq = (0-2, 3-7, 8, 9-15) returns true > $seq = (0-3, 3-7, 8, 9-15) returns false > --> > <xsl:function name="f:isConsecutive" as="xs:boolean"> > <xsl:param name="seq"/> > > <xsl:variable name="seq-with-to" as="xs:integer*"> > <xsl:evaluate xpath="$seq ! replace(., '-', ' to ') => > string-join(',')"/> > </xsl:variable> > <xsl:sequence select="deep-equal($seq-with-to, $seq-with-to[1] to > $seq-with-to[last()])"/> > </xsl:function> > Not very efficient, though. Try it with: (1-10000000, 10000001-20000000, 20000001-30000000, 30000001) Then run the pure XPath solution (provided earlier in this thread) - it takes 0.0s (as per Oxygen) to execute. The above XSLT transformation takes 5.2s (as per Oxygen) to produce the same result. Anyone, please try these for yourself. Thanks, Dimitre
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: Seeking an elegant XSLT f, Roger L Costello cos | Thread | Re: [xsl] Seeking an elegant XSLT f, Michael Kay mike@xxx |
[xsl] Re: Seeking an elegant XSLT f, Roger L Costello cos | Date | Re: [xsl] Re: Seeking an elegant XS, Dimitre Novatchev dn |
Month |