In Saxon 10 there is an extension function saxon:new-element().
https://www.saxonica.com/documentation/index.html#!functions/saxon/new-elemen
t
On Wed, Nov 25, 2020 at 3:04 AM Graydon graydon@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> So if I have a sequence of maps, such as one gets from using collection()
> with the metadata flag set in Saxon, and I want to serialize the result
> just to see what is in there, I'd like to be able to use:
>
> <xsl:sequence select="$fileArchive !
> map:for-each(.,function($k,$v){element{$k}{$v}})" />
>
> This isn't allowed, because map:for-each() takes an XPath function, rather
> than an XQuery function, so it hasn't got access to element constructors.
>
> <xsl:for-each select="$fileArchive">
> <xsl:variable as="map(*)" name="currentEntry" select="." />
> <entry>
> <xsl:for-each select="map:keys($currentEntry)[not(. eq 'fetch')]">
> <xsl:element name="{.}">
> <xsl:sequence select="$currentEntry(.)" />
> </xsl:element>
> </xsl:for-each>
> </entry>
> </xsl:for-each>
>
> works fine, but I can't help but feel that it lacks elegance of
> expression compared to the map:for-each() construction.
>
> Allowing XQuery anonymous functions would be a large change, but at least
> in the map serialization case[1] I have trouble thinking of a better
> option. XQuery functions are at least already well-defined.
>
> [1] I cannot tell you how much I want to be able to pass parameters to a
> functioned returned from a map of function items and have that function
> return elements for applying-a-style purposes, e.g.
>
> <xsl:sequence
> select="$stylesMap($styleTypeName)($stylePropertiesMap($styleName))" />
>
> --
> Graydon Saunders | graydonish@xxxxxxxxx
> CC&s oferC)ode, C0isses swC! mC&g.
> -- Deor ("That passed, so may this.")
| Current Thread |
|
Willem Van Lishout willemvanlishout@xxxxxxxxx - 25 Nov 2020 07:00:22 -0000 <=
Michael Kay mike@xxxxxxxxxxxx - 25 Nov 2020 10:07:09 -0000
|
|