Saxon-HE 集成扩展功能:当 运行 XQuery 脚本时,如何从配置对象中获取处理器对象?

Saxon-HE integrated extension function: How to get a Processor object from a Configuration object when running an XQuery script?

我正在尝试从 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 t运行sformation(来自 net.sf.saxon.Transform)时,变量是一个适当的 Processor 对象。

我正在从命令行进行查询,扩展 net.sf.saxon.Query 并覆盖 applyLocalOptions 以注册我的扩展函数。

我的最终目标是获得一个 DocumentBuilder 对象,Processor.newDocumentBuilder() 似乎是最简单的方法,但在这种情况下也许有解决方法。

查看代码,我认为我们从查询命令行创建配置的方式,它没有自己的处理器,所以命令行执行“开箱即用”,这不能完成。

但是,由于您要用自己的子类覆盖 net.sf.saxon.Query,因此您可以覆盖 parseOptions() 来执行

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

Transform 为子类提供了一个 initializeConfiguration() 挂钩,这在 Query 中很遗憾地缺失了。