gpt4 book ai didi

java - 如何从 Saxon 的扩展函数返回文档节点?

转载 作者:行者123 更新时间:2023-12-02 00:59:26 26 4
gpt4 key购买 nike

我正在看Integrated extension functions在 Saxon-HE 10 (Java) 中。

我需要该函数返回一个由 StreamSource 构造的 document-node()?

回答similar question提到这段代码:

context.getConfiguration().buildDocument()

但是,context 不会传递给 ExtensionFunction,仅传递 XdmValue[] 参数

ExtensionFunctionDefinition 确实接受 XPathContext 上下文,但看起来 getConfiguration().buildDocument() 在 10 中不存在。

相反,有context.getConfiguration().buildDocumentTree(Source source),但我不知道如何将TreeInfo转换为Sequence 接口(interface)签名所需。

最佳答案

“简单接口(interface)”(s9api.ExtensionFunction) 不允许传入 XPathContext 对象。但是,为此目的,您不需要完整的 XPath 动态上下文;您只需要访问配置对象。事实上,您可以在 s9api 级别执行所有操作,而无需深入研究 Saxon 内部:

    final Processor proc = new Processor();
ExtensionFunction ef = new ExtensionFunction() {
...
public XdmValue call(XdmValue[] arguments) throws SaxonApiException {
Source source = ...;
return proc.newDocumentBuilder().build(source);
}
};
proc.registerExtensionFunction(ef);

如果您确实需要比这更多的上下文信息,例如,如果您需要访问调用扩展函数的表达式的静态基本 URI,那么您需要使用带有单独 的“完整接口(interface)” ExtensionFunctionDefinitionExtensionFunctionCall 对象。

然后,您将需要使用较低级别的 Saxon 接口(interface),例如 SequenceNodeInfoConfiguration.buildDocumentTree() 返回一个 TreeInfo,其中有一个 getRootNode() 方法返回 NodeInfoNodeInfo 实现了 Item,而 Item 实现了 Sequence,因此您可以从 ExtensionFunctionCall.call( ) 方法。

关于java - 如何从 Saxon 的扩展函数返回文档节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60899154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com