xsl-list
[Top] [All Lists]

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

2019-09-02 16:40:55
Fixed -- had to include: visibility="public"

Thanks for the code example!

Dimitre

On Mon, Sep 2, 2019 at 2:33 PM Dimitre Novatchev 
<dnovatchev(_at_)gmail(_dot_)com>
wrote:

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(_dot_)honnen(_at_)gmx(_dot_)de <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

On 02.09.2019 22:55, Dimitre Novatchev dnovatchev(_at_)gmail(_dot_)com 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?




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