JSTL XML Transforms不使用嵌套的XSL包含

时间:2010-06-06 10:24:55

标签: xml xslt jstl

我有一点JSP可以做到这一点:

<c:import url="/xsl/Transformer.xsl" var="xslt" />
<x:transform doc="${actionBean.dom}" xslt="${xslt}" xsltSystemId="/xsl/">

只要Transformer.xsl不包含<xsl:include>个标记,或者只要它包含的任何文档都不包含任何内容,它就会完全按预期转换XML。

但是,如果我使用包含文档的XSL,而该文档又包含其他文档,则会出现以下错误:

ERROR:  'Invalid URI 'NestedInclude.xsl
Could not resolve entity reference: "NestedInclude.xsl"'.'

请注意,JSP包含在xsl文档下面的目录中。如果我的所有XSL和JSP都在同一个目录中(并且我删除了xsltSystemId属性)那么一切都会正常工作,但我真的不想这样做。

任何人都可以看到我做错了什么,因为它目前有点杀手而且JSTL文档几乎没用。

2 个答案:

答案 0 :(得分:1)

如果您为以“/”开头的xsltSystemId属性提供值,我相信JSTL会使用EntityResolver来尝试查找:PageContext.getServletContext().getResourceAsStream(xsltSystemId)。因此,您可以尝试xsltSystemId="/xsl/Transformer.xsl",或者只是省略属性。

答案 1 :(得分:1)

我有同样的问题,我可以通过给出绝对路径来解决。像这样的东西:

<c:import url="/WEB-INF/some-folders/xsl/Transformer.xsl"/>