This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Re: . in for
- From: Dimitre Novatchev <dnovatchev at yahoo dot com>
- To: Jeni Tennison <jeni at jenitennison dot com>
- Cc: xsl-list at lists dot mulberrytech dot com
- Date: Fri, 4 Jan 2002 23:37:02 -0800 (PST)
- Subject: Re: [xsl] Re: . in for
- Reply-to: xsl-list at lists dot mulberrytech dot com
--- Jeni Tennison <jeni@jenitennison.com> wrote:
> Sure. The XPath 2.0 WD gives only two distinct examples of the for
> expression, and neither of them would be achievable using the simple
> mapping operator.
>
> The first one has two range variables, as follows:
>
> for $i in (1, 2),
> $j in (3, 4)
> return ($i, $j)
>
> which returns the sequence:
>
> (1, 3, 1, 4, 2, 3, 2, 4)
>
> and is equivalent to:
>
> for $i in (1, 2)
> return for $j in (3, 4)
> return ($i, $j)
>
> This iterates over two sequences - (1, 2) and (3, 4) - within the same
> for expression, to create the sequence that contains pairs of possible
> combinations (ish - obviously in flat sequences the 'pairedness' isn't
> explicit).
>
> The second example has two for expressions. The inner for expression
> creates a sequence to iterate over using the range variable from the
> outer for expression within a predicate:
>
> for $a in distinct-values(//author)
> return ($a,
> for $b in //book[$b/author = $a]
> return $b/title)
>
> I don't think that you can do either of these with the operator syntax
> because you lose track of what *was* the context node as you go from
> one step to the next. If the outer context item was available with the
> current() function, say, then you could do:
>
> (1, 2) -> ((3, 4) -> (current(), .))
>
Maybe something like this:
( (x, y) | x -> (1,2) | y -> (3,4) )
> and:
>
> distinct-values(//author) ->
> (//book[author = current()] -> (current(), title))
>
> but without range variables, you can't manage these situations.
>
And:
( (y, x ) | x-> //book[author = y]/title | y -> distinct-values(//author) )
Cheers,
Dimitre Novatchev.
__________________________________________________
Do You Yahoo!?
Send FREE video emails in Yahoo! Mail!
http://promo.yahoo.com/videomail/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list