Subject: RE: [xsl] is arity-based "polymorphism" safe to use in xsl 2.0 functions? From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 28 Feb 2006 15:53:38 -0000 |
The spec allows you to write this because the designers thought it was useful, so go ahead and use it. But I prefer the version at http://www.w3.org/TR/xpath-functions/#index-of-node Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Joern Nettingsmeier [mailto:nettings@xxxxxxxxxxxxxxxxxxxxxx] > Sent: 28 February 2006 14:57 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] is arity-based "polymorphism" safe to use in > xsl 2.0 functions? > > hi ! > > > since the built-in position() function is awkward in some > cases, i wrote > a little helper positionInContext($haystack, $needle) that > will tell you > the position of $needle within $haystack. > > since it needs to keep an internal counter, i have solved it > like this: > > <!-- this is the "internal" function: --> > <xsl:function name="r2c:positionInContext" as="xs:integer"> > <xsl:param name="haystack" as="node()*"/> > <xsl:param name="needle" as="node()"/> > <xsl:param name="position" as="xs:integer"/> > <xsl:choose> > <!-- found? --> > <xsl:when test="$needle is $haystack[1]"> > <xsl:sequence select="$position"/> > </xsl:when> > <!-- haystack empty? --> > <xsl:when test="not($haystack[2])"> > <xsl:sequence select="0"/> > </xsl:when> > <!-- try next node in haystack: --> > <xsl:otherwise> > <xsl:sequence select=" > r2c:positionInContext( > $haystack[position() gt 1], > $needle, > $position + 1)" > /> > </xsl:otherwise> > </xsl:choose> > </xsl:function> > > <!-- this is the "API" function: --> > <xsl:function name="r2c:positionInContext" as="xs:integer"> > <xsl:param name="haystack" as="node()*"/> > <xsl:param name="needle" as="node()"/> > <xsl:sequence select="r2c:positionInContext($haystack, > $needle, 1)"/> > </xsl:function> > > > i know that xsl functions are not polymorphic as to datatypes, but the > spec says they are wrt number of arguments. i wonder: is this sort of > programming style ok, or am i stretching the spec? saxon processes it > just fine. > > > regards, > > jvrn > > -- > jvrn nettingsmeier > > home://germany/45128 essen/lortzingstr. 11/ > http://spunk.dnsalias.org > phone://+49/201/491621 > > if you are a free (as in "free speech") software developer > and you happen to be travelling near my home, drop me a line > and come round for a free (as in "free beer") beer. :-D
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] is arity-based "polymorphism", Joern Nettingsmeier | Thread | Re: [xsl] is arity-based "polymorph, Joern Nettingsmeier |
[xsl] Optional namespace declaratio, h e ayestaran | Date | Re: [xsl] Optional namespace declar, G. Ken Holman |
Month |