Re: [xsl] Determine position in node sequence based on criteria

Subject: Re: [xsl] Determine position in node sequence based on criteria
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Wed, 30 Jun 2010 15:28:32 +0100
Agreed. It seems like it would be real handy to have position() take
an argument:

position(../s[])

and return the position of the matching items...

The position of what item in what sequence?


or loosen the
restrictions on position() in a for expression, or have a different
function where you could get the position in a for expression:

for $i in ../s
  if (...) then $i/position() else ()


This all depends on maintaining more context, and we've arguably got too much context-sensitivity already, especially in XSLT.


It would be much cleaner with a higher-order function, which you can write in XSLT/XPath 2.1:

<xsl:function name="f:index-of" as="xs:integer*">
<xsl:param name="sequence" as="item()*"/>
<xsl:param name="test" as="function(item()) as xs:boolean"/>
<xs:sequence select="for $i in 1 to count(sequence) return $i[$test($seq[$i])]"/>
</xsl:function>


then

f:index-of(../c, function($c){matches($c, $regex)})

Michael Kay
Saxonica

Current Thread