【发布时间】: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() 似乎是最简单的方法,但在这种情况下也许有一种解决方法。
【问题讨论】:
-
不确定,也许处理器构造函数采用 Query 方法似乎使用的配置缺少调用
config.setProcessor(this): saxonica.plan.io/projects/saxon/repository/he/revisions/master/… 与 saxonica.plan.io/projects/saxon/repository/he/revisions/master/… 似乎在 Transform 类中使用. -
也许使用配置 saxonica.com/html/documentation/javadoc/net/sf/saxon/… 的 buildDocumentTree 方法就足以满足您的需要,因此您无需访问 Processor 或 DocumentBuilder。
-
@MartinHonnen 我不认为
buildDocumentTree是我的想法,因为我没有javax.xml.transform.Source。我想要DocumentBuilder的原因是获取BuildingStreamWriter并使用XMLStreamWriter方法构造NodeInfo。 -
让我们看看 Saxonica/Michael Kay 怎么说,在我看来,Query 方法的设置方式是 Configuration 和 Processor,它缺少将处理器连接到配置的代码。如果您想从某个配置 Saxon 10 即时构建文档,还有saxonica.com/documentation/index.html#!javadoc/…。