Re: Processiing arrays in XSLT 4

Yes, that's right (I had already spotted it but didn't want to trouble anyone...)

I think we can also allow <xsl:for-each map="$map"> creating items accessible as .?key and .?value. I've tried a few JSON-to-XML examples and it works quite nicely, including (probably) for grouping.

I think the keywords array="X" and map="Y" work OK, rather that say element-in-array or entry-in-map. After all, X is an array and Y is a map. It would ideally be

<xsl:for-each-in array="X">

but we don't want to change the instruction name.

Or we could do

<xsl:for-each in-array="X">

but it feels like unnecessary noise.

Michael Kay
Saxonica

> On 12 Jan 2021, at 12:38, Martin Honnen <martin.honnen@gmx.de> wrote:
> 
> 
> On 12.01.2021 12:27, Martin Honnen wrote:
>> 
>> On 12.01.2021 11:25, Michael Kay wrote:
>>> Mindful of DImitre's exhortation to avoid growing the language any
>>> more than is necessary, I propose the following:
>>> 
>>> * xsl:for-each, xsl:iterate, and xsl:for-each-group acquire an
>>> attribute array=expression which can be used instead of
>>> select=expression
>>> 
>>> * specifying array="EXPR" is equivalent to specifying
>>> select="array:for-each(EXPR, function($x){map{'value': $x})"/>
> 
> 
> Is that meant as
> 
>    select="array:for-each(EXPR, function($x){map{'value': $x}})?*"
> 
> ?
> 
>>> 
>>> The effect is that you iterate over the members of the array, and
>>> that you can refer to the current member of the array as .?value. The
>>> position of the member within the array is available as position().
>>> 
>>> 
>> 
>> Does that work with for-each-group where inside of the instruction
>> position() is supposed to give you the position of the current group and
>> not the position of the item in the grouping population?
>> 
>> Or how does grouping work if the population is a (single?) array created
>> by array:for-each?
>> 
>> 
> 

Received on Tuesday, 12 January 2021 13:03:52 UTC