TransformerFactory - 使用多个样式表

时间:2018-05-31 08:33:32

标签: java xml xslt xsd

我有多个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);
}}

1 个答案:

答案 0 :(得分:0)

您应该只为TransformerFactory.newTemplates()方法指定顶级样式表。顶级样式表将使用xsl:includexsl:import引入其他样式表模块。如果这些样式表模块仅存在于内存中,则需要指定URIResolverTransformerFactory。遇到URIResolverxsl:include声明时,系统会调用xsl:import,并应返回Source个对象(例如StreamSource)以传递样式表模块的内容。