【发布时间】:2021-08-13 23:03:00
【问题描述】:
我们有 xslt 文件,它有多个 xsl:include /document,我正在缓存 XsltExecutable 对象(已编译的 xsl),并且同样用于多个线程的转换。
我的问题是,我们是否需要在编译以及执行转换过程中提供 URIResolver?,编译后的样式表(XsltExecutable 对象)不包括所有相关/依赖的样式表?。 p>
在我的情况下,如果我没有在两个地方都提供 URIResolver,我会收到错误消息。无论如何我们可以保留常见xsls的XsltExecutable并在其他xslt的编译/执行阶段包含它。
注意:我们使用的是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");
}
【问题讨论】: