我有一点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文档几乎没用。
答案 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"/>