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 中很遗憾地缺失了。
我正在尝试从 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 中很遗憾地缺失了。