[xuriella-devel] Question concerning custom xpath functions returning node sets
R. Mattes
rm at mh-freiburg.de
Tue May 8 19:42:21 UTC 2012
Dear list,
I'm trying to extend xuriella by writing some custom
xpath functions (using plexippus' extension mechanism).
This works fine for functions returning strings, booleans or
numbers, but I now need to write a function that returns a
node set so that the following will work:
<xsl:for-each select='my:fun("sample string", 3)'>
<xsl:value-of select='pos()'/> <xsl:value-of select='.'/>
</xsl:for-each>
My first (naive) implementation looked like this:
(xpath-sys:define-xpath-function/eager
my fun (string &optional (count 1))
(loop for i from 0 to count
collect string into value-list
finally (return (xpath-sys:make-node-set
(xpath-sys:make-pipe (car value-list) (cdr
value-list))))))
Testing seem to work:
CL-USER> (xpath:with-namespaces (("my" "http://my.ns"))
(xpath:evaluate "my:myfun('blah')" nil))
#<XPATH:NODE-SET 3, ... {CB289B1}>
A nodeset, as expected.
But using this function in a stylesheet throw the following error:
CL-USER> (xuriella:apply-stylesheet #p"test.xsl" #p"test.xsl")
There is no applicable method for the generic function
#<STANDARD-GENERIC-FUNCTION
XPATH-PROTOCOL:NODE-TEXT-USING-NAVIGATOR (7)>
when called with arguments
(:DEFAULT-NAVIGATOR "sample string").
[Condition of type SIMPLE-ERROR]
What do I miss? (besides better documentation ;-)
TIA Ralf Mattes
More information about the xuriella-devel
mailing list