xsl-list
[Top] [All Lists]

Re: [xsl] XSLT 4: map serialization

2020-11-25 01:00:28
In Saxon 10 there is an extension function saxon:new-element().
https://www.saxonica.com/documentation/index.html#!functions/saxon/new-element



On Wed, Nov 25, 2020 at 3:04 AM Graydon graydon(_at_)marost(_dot_)ca <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> 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(_at_)gmail(_dot_)com
Þæs oferéode, ðisses swá mæg.
-- Deor  ("That passed, so may this.")


--~----------------------------------------------------------------
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>