0

I'm implementing several libraries(libxslt, libxml2, libexslt) for XSLT Processing in my program. I included the header files and .so files to link the libraries to the program, and found out that the linking worked well.

Below is the code using some functions of the library to realize XSLT Processing in my program, and as a result the first two line worked well but an error was generated on the last line.

style=xsltParseStylesheetFile(stylesheetfile);
input=xmlParseFile(inputfile);
output=xsltApplyStylesheet(style, input,0); //error

//error
xmlXPathCompOpEval : function node-set not found
XPath error : Unregistered function

The same XSLT processing worked well using xsltproc which is a command-line version of libxslt and the same XML(inputfile) and XSL files(stylesheetfile) in my computer, but the implementation won't work.

I know that the node-set function is in libexslt. But why won't it work? Is it the linking problem of the library? Especially libexslt? or configuration? Do you guys know any solution of this error? Would really appreciate your help. Thank you.

BcFlower
  • 25
  • 3
  • 2
    Did you call `exsltRegisterAll();`, like xsltproc does at https://gitlab.gnome.org/GNOME/libxslt/blob/master/xsltproc/xsltproc.c#L803? Only including headers and linking to the libaries doesn't enable extension functions as far as I understand it. To use the `node-set` function it would of course suffice to register the common extension functions. – Martin Honnen Nov 24 '18 at 09:35
  • @MartinHonnen No, I didn't call `exsltRegisterAll();` Now I called the function and it worked. Thank you so much, I really appreciate it :) – BcFlower Nov 26 '18 at 04:41
  • I have morphed the suggestion from the comment into a answer so that you can mark your question as being solved. – Martin Honnen Nov 26 '18 at 06:43

1 Answers1

2

The inclusion of headers and linking to the relevant libraries alone doesn't enable extension functions, as you mention xsltproc supporting them see the source code of it at https://gitlab.gnome.org/GNOME/libxslt/blob/master/xsltproc/xsltproc.c#L803 where it calls

exsltRegisterAll();

to enable respectively register all EXSLT extension functions with the XSLT processor.

Martin Honnen
  • 160,499
  • 6
  • 90
  • 110