【问题标题】:xmlXPathCompOpEval: function node-set not foundxmlXPathCompOpEval:未找到函数节点集
【发布时间】:2018-11-24 07:46:16
【问题描述】:

我正在实现几个库(libxslt、libxml2、libexslt) 用于我程序中的 XSLT 处理。我包含了头文件和 .so 文件以将库链接到程序,发现链接效果很好。

下面是在我的程序中使用库的一些函数实现XSLT处理的代码,结果前两行运行良好,但在最后一行产生了错误。

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

//错误
xmlXPathCompOpEval:找不到函数节点集
XPath 错误:未注册的函数

同样的 XSLT 处理使用 xsltproc 运行良好工作。

我知道 node-set 函数在 libexslt 中。 但为什么它不起作用? 是图书馆的链接问题吗?特别是 libexslt? 还是配置? 你们知道这个错误的任何解决方案吗? 非常感谢您的帮助。 谢谢。

【问题讨论】:

  • 你打电话给exsltRegisterAll();了吗,就像xsltproc在gitlab.gnome.org/GNOME/libxslt/blob/master/xsltproc/…做的那样?据我了解,仅包括标头和链接到库并不能启用扩展功能。要使用node-set 函数,注册通用扩展函数当然就足够了。
  • @MartinHonnen 不,我没有调用exsltRegisterAll(); 现在我调用了该函数并且它起作用了。非常感谢,我真的很感激:)
  • 我已将评论中的建议转换为答案,以便您可以将您的问题标记为已解决。

标签: xml xslt libxml2 libxslt node-set


【解决方案1】:

仅包含标头和链接到相关库并不能启用扩展功能,因为您提到 xsltproc 支持它们,请参阅它的源代码 https://gitlab.gnome.org/GNOME/libxslt/blob/master/xsltproc/xsltproc.c#L803 它调用的地方

exsltRegisterAll();

启用向 XSLT 处理器分别注册所有 EXSLT 扩展功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多