xsl-list
[Top] [All Lists]

Re: [xsl] passing a function as a parameter to transform()

2021-05-13 16:20:48


On 13 May 2021, at 22:05, Graydon graydon(_at_)marost(_dot_)ca 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hello --

Using Saxon 10.3 and XSLT 3.0 (from inside oXygen 23), can I pass a function 
as
a parameter to transform()?

<xsl:sequence select="
transform(map {
  'stylesheet-location': 'tidy.xsl',
  'source-node': $tableMerge,
  'stylesheet-params': map {
    QName('', 'defaultLang'): $defaultLang,
    QName('', 'overrideStringMap'): $overrideStringMap,
    QName('', 'lang2key2autotextMap'): $lang2key2autotextMap,
    QName('local','getString') : local:getString(xs:string,xs:string)
  }
})?output" />

is syntactically acceptable.

yes, but you aren't passing a function, you are passing the result of calling 
local:getString with parameters child::xs:string and child::xs:string. Unless 
you have any child elements called xs:string, which is unlikely, the actual 
parameter values are empty sequences, which is probably why the function is 
complaining.

To pass the function itself, rather than the result of a function call, use 
local:getString#2.

Michael Kay
Saxonica


Inside tidy.xsl,

<xsl:param as="xs:string" name="defaultLang" />
 <xsl:param as="map(*)" name="overrideStringMap" />
 <xsl:param as="map(*)" name="lang2key2autotextMap" />
 <xsl:param as="function(xs:string,xs:string) as xs:string" 
name="local:getString" />

is syntactically acceptable (though oXygen complains about the actual 
function calls and not being able to find the function).

If I run the transform, though, I get:
Engine name: Saxon-EE 10.3 (External)
Severity: error
Description: An empty sequence is not allowed as the first argument of 
local:getString()

with a location that tells me the transform call parameter map is where the 
error happens.

Is there a way to do this?  I can of course duplicate the function definition 
but that seems improper.

Thanks!


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