[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: for vs. for-each

Subject: Re: for vs. for-each
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 14 Mar 2021 19:48:32 -0000
Re:  for vs. for-each
On Sun, Mar 14, 2021 at 11:55 AM Michael Kay mike@xxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

>  For 4.0, however, I would like to see better ways of accessing items in a
> sequence by position, and there has been much discussion about how best to
> achiieve this.
>

Yes, we already do have the index-of() function, but we need a reverse to
this:

from-indexes($vSeq, $vIndexes)

and this would produce a sequence with items each of which is the item of
$vSeq at position the value of the $index-value in $vIndexes, when
$index-value iterates over $vIndexes, ot more strictly:

     for $ind in $vIndexes
       return $vSeq[$ind]

Why reverse of index-of() ?

Because, for any $x in $vSeq it is true that

     from-indexes($vSeq, index-of($vSeq, $x))

is a sequence containing all $x items from $vSeq.

Or:

     $x eq distinct-values( from-indexes($vSeq, index-of($vSeq, $x)) )

Or if we had sets in XPath, then:

     set {$x} === set { from-indexes($vSeq, index-of($vSeq, $x)) }

And this can also be written as:

     set {$x}  ===  set { $vSeq => from-indexes( $vSeq => index-of($x)) }


There is even this proposal for an operator notation for the from-indexes()
function, but individual preferences at present seem to vary too much in
order to choose such an operator:

https://github.com/qt4cg/qtspecs/issues/50


Thanks,
Dimitre






>
> Michael Kay
> Saxonica
>
> > On 14 Mar 2021, at 18:04, Michael MC<ller-Hillebrand mmh@xxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> >
> > Folks,
> >
> > Given a variable with a sequence of values
> >
> > <xsl:variable name="values" select="(1,2,3,4,5)" as="xs:double+"/>
> >
> > these are three methods to report its content
> >
> > <xsl:sequence select="for $i in 1 to count($values) return $values[$i]"/>
> >
> > <xsl:for-each select="1 to count($values)">
> >    <xsl:sequence select="$values[.]"/>
> > </xsl:for-each>
> >
> > <xsl:for-each select="1 to count($values)">
> >    <xsl:sequence select="$values[current()]"/>
> > </xsl:for-each>
> >
> > The first works as expected, the second does not, but the third
> astonishingly enough gives me the same result as the first. Check it out:
> >
> > https://xsltfiddle.liberty-development.net/ei5R4v8/2
> >
> > I read/understand that there is a difference between a for expression
> and a path expression, but since we can use atomized values in
> xsl:for-each, I would like to see more similarity between for and for-each.
> >
> > Should this be on the wishlist for XSLT 4 or do I have to
> learn/understand some more concepts?
> >
> > Puzzled greeting,
> >
> > - Michael

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.