我遇到了一个问题。我需要在Java中使用XSLT 2.0(SAXON-HE 9.8.0处理器)来转换XML。在我的XSLT中,我正在使用(通过导入)来自functx的外部函数。

当两个文件(带有functx的xslt映射和.xsl文件)都位于同一目录中时,一切正常。
在我的.xsl中,functx已正确导入,并且可以正常工作:

xmlns:functx =“ http://www.functx.com”

xsl:import href =“ functx-package.xsl”

当两个文件都以String对象或InputStreams或其他形式存在于内存中时,是否可以使用我的.xsl映射中的functx使用外部函数?

我无法像以前一样将文件存储在驱动器上的一个目录中。

可能解决我的问题的唯一可能性是将functx文件粘贴到我的.xsl映射器中,但这是错误的解决方案-[非常]不好的做法。

我该怎么用:


Java 7
SAXON-HE 9.8.0处理器
XSLT 2.0

最佳答案

提供具有逻辑的编译时URIResolver

public Source resolve(String href, String base) {
  if (href.equals("functx-package.xsl")) {
     return new StreamSource(new StringReader(functxAsString));
  } else {
     return null;
  }
}


如果使用s9api,则将编译时URIResolver提供给XsltCompiler,如果使用JAXP,则将其提供给TransformerFactory。

10-04 20:17