Page 1 of 1

node-set or nodeset?

Posted: Fri Sep 22, 2017 11:49 am
by AndreasT
Hello.
I have been using Oxygen with an old XSLT stylesheet for many years without issues, but when I revisited the stylesheet today, I suddenly get an error upon transformation of a XML file:

Code: Select all

Engine name: Xalan
Severity: fatal
Description: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xalan.lib.Extensions.nodeSet([ExpressionContext,] #RTREEFRAG).
Checked both static and instance methods.


The offending function is: <xsl:for-each select="xalan:node-set($temp)">

Changing it to: <xsl:for-each select="xalan:nodeset($temp)"> throws no error and seens to work as before.

I cannot find any documentaion on why and how this occurs and if this fix is "safe".

I suspect the problem arose after a system upgrade on the Mac I am using, but I cannot be sure.

Re: node-set or nodeset?

Posted: Fri Sep 22, 2017 3:59 pm
by adrian
Hello,

The confusion over the name of this extension function is due to the fact that each XSLT 1.0 processor implemented it differently.
I found an article and table that clarifies this: Understanding the node-set() Function by Jirka Kosek - Support for node-set() in XSLT processors

In short, if your xalan namespace prefix is indeed declared to indicate Xalan (xmlns:xalan="http://xml.apache.org/xalan") then the name of the function is nodeset(). Otherwise, if the namespace is http://exslt.org/common (EXSLT), node-set() should be used.

Regards,
Adrian

Re: node-set or nodeset?

Posted: Fri Sep 22, 2017 6:27 pm
by AndreasT
Ok, thank you for the clarification.

Xalan is the processor in use by the host system, so I need to code for that.
Not sure if they support EXSLT.

Strange though that node-set has worked for years with the xalan prefix.

Anyway, thanks again.