撒克逊 URI 解析器
Saxonica URI Resolver
我们有包含多个 xsl:include /document 的 xslt 文件,我正在缓存 XsltExecutable 对象(已编译的 xsl)并用于多个线程的转换。
我的问题是,我们是否需要在编译和执行转换期间提供URIResolver?,编译样式sheet(XsltExecutable 对象)不包括所有related/dependent 风格 sheets?.
在我的例子中,如果我没有在两个地方都提供 URIResolver,我会收到错误消息。无论如何我们可以保留常见 xsls 的 XsltExecutable 并将其包含在其他 xslts 的 compilation/execution 阶段。
注意:我们正在使用 saxonica EE
public void transform(XsltExecutable stylesheet,Map<String, String> formatterMap, String sourceXMl, String outFileName) throws SaxonApiException {
Processor processor = new Processor(true);
Serializer out = processor.newSerializer(new File(outFileName + ".xml"));
out.setOutputProperty(Serializer.Property.METHOD, "xml");
out.setOutputProperty(Serializer.Property.INDENT, "yes");
Xslt30Transformer trans = stylesheet.load30();
trans.setURIResolver(new CigURIResolver(formatterMap));
trans.transform(new StreamSource(new StringReader(sourceXMl)), out);
System.out.println("Output written to out.xml");
}
XsltCompiler
上的 URIResolver
主要用于解析编译时 xsl:include
和 xsl:import
声明。 XsltTransformer
上的 URIResolver
主要用于解析 doc()
和 document()
函数的 运行 次调用。
一个XsltExecutable
代表一个完整的编译样式表。如果您想独立编译样式表的不同部分,并且 link 将单独编译的部分以不同的组合组合在一起,那么您需要将其定义为多个单独的包,使用新的 XSLT 3.0 结构 xsl:package
和 xsl:use-package
(而不是 xsl:import
/xsl:include
)。在 API 级别,编译包使用 XsltPackage
对象表示。
我们有包含多个 xsl:include /document 的 xslt 文件,我正在缓存 XsltExecutable 对象(已编译的 xsl)并用于多个线程的转换。
我的问题是,我们是否需要在编译和执行转换期间提供URIResolver?,编译样式sheet(XsltExecutable 对象)不包括所有related/dependent 风格 sheets?.
在我的例子中,如果我没有在两个地方都提供 URIResolver,我会收到错误消息。无论如何我们可以保留常见 xsls 的 XsltExecutable 并将其包含在其他 xslts 的 compilation/execution 阶段。
注意:我们正在使用 saxonica EE
public void transform(XsltExecutable stylesheet,Map<String, String> formatterMap, String sourceXMl, String outFileName) throws SaxonApiException {
Processor processor = new Processor(true);
Serializer out = processor.newSerializer(new File(outFileName + ".xml"));
out.setOutputProperty(Serializer.Property.METHOD, "xml");
out.setOutputProperty(Serializer.Property.INDENT, "yes");
Xslt30Transformer trans = stylesheet.load30();
trans.setURIResolver(new CigURIResolver(formatterMap));
trans.transform(new StreamSource(new StringReader(sourceXMl)), out);
System.out.println("Output written to out.xml");
}
XsltCompiler
上的 URIResolver
主要用于解析编译时 xsl:include
和 xsl:import
声明。 XsltTransformer
上的 URIResolver
主要用于解析 doc()
和 document()
函数的 运行 次调用。
一个XsltExecutable
代表一个完整的编译样式表。如果您想独立编译样式表的不同部分,并且 link 将单独编译的部分以不同的组合组合在一起,那么您需要将其定义为多个单独的包,使用新的 XSLT 3.0 结构 xsl:package
和 xsl:use-package
(而不是 xsl:import
/xsl:include
)。在 API 级别,编译包使用 XsltPackage
对象表示。