我有多个XSL或样式表用于XML的架构师验证(其中一个是根,另一个是导入到根)。以下代码适用于一个样式表。
public XMLSaxonTransformer(InputStream styleSheet) {
final TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
try {
styleSheetTemplate = transformerFactory.newTemplates(new StreamSource(styleSheet), new StreamSource(styleSheet));
} catch (TransformerConfigurationException e) {
throw new Exception("Exception caught while parsing StyleSheet", e);
}
}
以上适用于单一样式表。但是,我的要求是多个样式表有一个根,其他样式表包含在根目录中。
我的代码应该如下所示。
public XMLSaxonTransformer(List<InputStream> styleSheetList) {
final TransformerFactory transformerFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", null);
try {
// do something to add the XSL's list to the transformer
} catch (TransformerConfigurationException e) {
throw new Exception("Exception caught while parsing StyleSheet", e);
}}
答案 0 :(得分:0)
您应该只为TransformerFactory.newTemplates()
方法指定顶级样式表。顶级样式表将使用xsl:include
或xsl:import
引入其他样式表模块。如果这些样式表模块仅存在于内存中,则需要指定URIResolver
到TransformerFactory
。遇到URIResolver
或xsl:include
声明时,系统会调用xsl:import
,并应返回Source
个对象(例如StreamSource
)以传递样式表模块的内容。