xsl-list
[Top] [All Lists]

Re: [xsl] XSLT 4 xsl:with

2020-05-21 00:58:14


<xsl:for-each-group select="some-node" group-by="true()">
  .... inside I have current-group() ...
</xsl:for-each-group>

-- which has sometimes made me wonder if group-by="true()" might be a
default on for-each-group?


This reminds me that I've been trying to find a good syntax for doing

<xsl:for-each-member-in-array select="[(1 to 3), (5 to 9), (10 to 20)]">
   <x>{count(current-member())}</x>
</xsl:for-each-member-in-array>

where the result is 
<x>3<x><x>5</x><x>11</x>

I have a general distaste for adding more bits and pieces to the dynamic 
context (current-this() and current-that()). They all clutter the space, they 
have messy static and dynamic scoping rules, and you often end up binding them 
to variables anyway. I would prefer to bind explicit variables: in some drafts 
of XSLT 3.0 we used binding variables on xsl:for-each-group, and that's what 
saxon:for-each-member currently does:

https://saxonica.com/documentation/index.html#!extensions/instructions/for-each-member

<saxon:for-each-member select="[(1 to 3), (5 to 9), (10 to 20)]" bind-to="m">
   <x>{count($m)}</x>
</saxon:for-each-member>

What do other people feel? Should we have @bind-to on other things like 
xsl:for-each and xsl:for-each-group?

The other approach to the above construct is to do it all in XPath. You can 
also do this in Saxon 10:

<xsl:sequence select="[(1 to 3), (5 to 9), (10 to 20)] => 
array:for-each(_{saxon:new-element("x", string(count($1))})"/>


Michael Kay
Saxonica
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>