我遇到了一个问题。我需要在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。