Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Saxon';s扩展函数?_Java_Xml_Xslt_Saxon - Fatal编程技术网

Java 如何从Saxon';s扩展函数?

Java 如何从Saxon';s扩展函数?,java,xml,xslt,saxon,Java,Xml,Xslt,Saxon,我正在看撒克逊HE 10(Java) 我需要函数返回一个document-node()?,它是从StreamSource构建的 对a的回答提到了该代码: context.getConfiguration().buildDocument() 但是,context不会传递给ExtensionFunction,只有XdmValue[]参数 ExtensionFunctionDefinition不接受XPathContext,但它看起来像getConfiguration()。buildDocument

我正在看撒克逊HE 10(Java)

我需要函数返回一个
document-node()?
,它是从
StreamSource
构建的

对a的回答提到了该代码:

context.getConfiguration().buildDocument()
但是,
context
不会传递给
ExtensionFunction
,只有
XdmValue[]参数

ExtensionFunctionDefinition
不接受
XPathContext
,但它看起来像
getConfiguration()。buildDocument()
在10中不存在

相反,有
context.getConfiguration().buildDocumentTree(源代码)
,但我不知道如何转换
TreeInfo
它返回到接口签名所需的
序列。

简单接口(
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,那么您需要对单独的
ExtensionFunctionDefinition
ExtensionFunctionCall
对象使用“完整接口”

然后需要使用较低级别的Saxon接口,如
Sequence
NodeInfo
Configuration.buildDocumentTree()
返回一个
TreeInfo
,它有一个
getRootNode()
方法返回一个
NodeInfo
NodeInfo
实现了实现序列的
项,因此您可以从
ExtensionFunctionCall.call()
方法返回
NodeInfo

简单接口(
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,那么您需要对单独的
ExtensionFunctionDefinition
ExtensionFunctionCall
对象使用“完整接口”


然后需要使用较低级别的Saxon接口,如
Sequence
NodeInfo
Configuration.buildDocumentTree()
返回一个
TreeInfo
,它有一个
getRootNode()
方法返回一个
NodeInfo
NodeInfo
实现了
项,该项实现了
序列
,因此您可以从
扩展函数call.call()
方法返回
NodeInfo

谢谢。我想要一个单独的函数类,但是我想我可以把
处理器
传递到它的构造函数中。谢谢。我希望函数有一个单独的类,但我想我可以将
处理器
传递到它的构造函数中。