saxon he集成扩展函数:运行xquery脚本时如何从配置对象获取处理器对象?

dffbzjpn  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(316)

我试图从一个配置对象中获取processor对象,该配置对象在xquery脚本(从 net.sf.saxon.Query ). 如果我这样做,变量 processor 为空:

public class MyFunctionCall extends ExtensionFunctionCall {
    public Sequence call(XPathContext ctxt, Sequence[] params) throws XPathException {
        Processor processor = (Processor) ctxt.getConfiguration().getProcessor();
        // Abbreviated
    }
}

但是,在执行xslt转换时(从 net.sf.saxon.Transform ),变量是正确的 Processor 对象。
我从命令行执行查询,扩展 net.sf.saxon.Query 和覆盖 applyLocalOptions 为了注册我的扩展函数。
我的最终目标是得到一个 DocumentBuilder 对象,以及 Processor.newDocumentBuilder() 似乎是最简单的方法,但在这种情况下也许有解决办法。

idfiyjo8

idfiyjo81#

看看代码,我认为我们从查询命令行创建配置的方式,它没有拥有自己的处理器,因此使用“开箱即用”的命令行执行,这是做不到的。
但是,既然你在 net.sf.saxon.Query 使用自己的子类,可以重写 parseOptions() 待办事项

config.setProcessor(processor);
super.parseOptions(options);

transform为子类提供initializeconfiguration()钩子,这在查询中很遗憾地丢失了。

相关问题