Search code examples
node.jsxsltexsltlibxslt

how to use exsl:node-set from nodejs/node_xslt?


I am trying to use EXSLT node-set function from nodejs via node_xslt module. This is a simple wrapper around the libxslt library that has support for EXSLT as I could get it. Yet any reference to exsl:node-set produces Thi is how I use it.

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:exsl="http://exslt.org/common"
                    extension-element-prefixes="exsl">

<xsl:variable name="variable">
  <item />
  <item />
</xsl:variable>

    <xsl:variable name="result" select="exsl:node-set($variable)"/>

Any this is the error:

xmlXPathCompOpEval: function node-set not found XPath error : Unregistered function runtime error: file ./JayDataContextGenerator_OData_V2.xslt line 58 element for-each Failed to evaluate the 'select' expression.

UPDATE: Bahblah, author of the node_xslt plugin has updated the project in github, so the above mentioned transformation executes without any further ado.


Solution

  • Finally figured it out inspecting xsltproc.c, I had to add the following additions to node_xslt.c

    to the top:

    #include <libexslt/exslt.h>
    #include <libexslt/exsltconfig.h>
    

    And to line 138, into FUNCTION( transform )

    exsltRegisterAll();
    

    Extend wscript so that:

    obj.lib = ['xml2', 'xslt', 'exslt']
    

    Then I had to rebuild node_xslt with

    node-waf build
    

    After this exsl:node-set() works like charm.