Re: [xsl] Question for a code example of <xsl:evaluate> in which the target expression calls a user-defined xsl:function

Subject: Re: [xsl] Question for a code example of <xsl:evaluate> in which the target expression calls a user-defined xsl:function
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 2 Sep 2019 21:33:26 -0000
Thanks Martin,

> So what happened with your "attempts to call such an existing
> xsl:function", any error?

Severity: fatal
Description: Static error in XPath expression supplied to xsl:evaluate:
Function {http://my.namespace}doSomething#1 not found.

In the target text, among other things there is this:

     $ops := Q {http://my.namespace}doSomething#1 ('myArgument'),

And I have an existing xsl:function:

<xsl:function name="f:doSomething">
    <xsl:param name="pmyArgument" as="xs:string+"/>
.  .  .  .  .  .


Thanks,
Dimitre

On Mon, Sep 2, 2019 at 2:03 PM Martin Honnen martin.honnen@xxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> On 02.09.2019 22:55, Dimitre Novatchev dnovatchev@xxxxxxxxx wrote:
> > I need to call an existing xsl:function from within the xpath
> > (target-expression ) attribute of <xsl:evaluate>.
> >
> > 1. Is this possible / allowed? From reading the W3C XSLT 3.0 Spec it
> > seems so -- https://www.w3.org/TR/xslt-30/#dynamic-xpath  has a bullet
> > in the list of available function signatures, saying :
> >
> > "All user-defined functions present in the containing package provided
> > their visibility is not hidden or private;"
> >
> > However, my attempts to call such an existing xsl:function from within
> > the target-expression were not successful.
> >
> > 2. Could someone provide a working code example of doing this?
>
> The test suite has the code sample
>
> https://github.com/w3c/xslt30-test/blob/master/tests/insn/evaluate/evaluate-001.xsl
> with
>
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> version="3.0"
>    xmlns:my="http://www.example.com/my-functions";
> exclude-result-prefixes="my">
>
>    <!-- PURPOSE test xsl:evaluate with a literal argument calling a
> stylesheet function -->
>
>
>    <xsl:template name="main">
>      <out>
>        <xsl:evaluate xpath="'my:f()'"/>
>      </out>
>    </xsl:template>
>
>    <xsl:function name="my:f" visibility="public">
>      <xsl:sequence select="$p"/>
>    </xsl:function>
>
>    <xsl:param name="p" select="42"/>
>
> </xsl:stylesheet>
>
> for instance, runs fine for me within oXygen and Saxon 9.8 EE using the
> "main" template as the entry point.
>
>
> So what happened with your "attempts to call such an existing
> xsl:function", any error?

Current Thread