[xquery-talk] position() and last()
Michael Kay
mhk at mhk.me.uk
Wed Sep 1 10:01:46 PDT 2004
A "for" expression does not change the focus (that is, the context item,
position, or size). This is a common mistake for anyone accustomed to
xsl:for-each - I make it frequently myself.
In XQuery (but not XPath) you can assign an extra variable to represent the
current position, thus:
for $i at $pos in $items return
($i, if ($pos = count($items)) then () else ",")
Alternatively you can iterate over the positions:
(for $n in 1 to count($items)-1 return ($items[$n], ",")), $items[last()])
In many cases (but not this one) the insertion of separators between items
can be achieved using the string-join function:
string-join($items, ',')
position() and last() are available in XQuery but they are only really
useful inside predicates.
Michael Kay
> -----Original Message-----
> From: talk-bounces at xquery.com
> [mailto:talk-bounces at xquery.com] On Behalf Of R. Mark Volkmann
> Sent: 01 September 2004 04:15
> To: talk at xquery.com
> Subject: [xquery-talk] position() and last()
>
> I know how to use these functions in XSLT, but I haven't
> figured out how to
> use them in XQuery.
> For example, suppose I want to put a comma between items, but
> not after the
> last one.
> I could do something like this.
>
> for $i in $items
> return (
> $i,
> if (position() = last()) then () else ","
> )
>
> This doesn't work. What am I doing wrong?
>
>
> _______________________________________________
> talk at xquery.com
> http://xquery.com/mailman/listinfo/talk
>
More information about the talk
mailing list