【问题标题】:Saxon-HE integrated extension function: How to get a Processor object from a Configuration object when running an XQuery script?Saxon-HE集成扩展功能:运行XQuery脚本时如何从Configuration对象中获取Processor对象?
【发布时间】:2020-12-06 19:14:15
【问题描述】:

我正在尝试从配置对象中获取处理器对象,该对象具有 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() 似乎是最简单的方法,但在这种情况下也许有一种解决方法。

【问题讨论】:

标签: java xquery saxon


【解决方案1】:

查看代码,我认为我们从查询命令行创建配置的方式,它没有拥有的处理器,所以命令行执行“开箱即用”,这是无法完成的.

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

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

Transform 为子类提供了一个 initializeConfiguration() 钩子,遗憾的是 Query 中没有。

【讨论】:

  • 谢谢,这样设置处理器很有用!
猜你喜欢
  • 2014-11-04
  • 2016-01-28
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
相关资源
最近更新 更多