我正在尝试使用ant来使用XSLT在我的项目中预处理三个特定的样式表。 Ant documentation for the xslt task表示它应该能够接受任何资源收集。具体来说,它说:
使用资源集合指定应该应用样式表的资源。使用嵌套映射器和任务的destdir属性来指定输出文件。
因此,我尝试使用文件集指定这些样式表,并将文件集用作xslt任务中的嵌套元素,但到目前为止,这还没有起作用。相反,它将做的似乎是忽略指定的文件集,并扫描整个项目以查找以.xsl结尾的文件,将样式表应用于这些文件集,并根据映射器中指定的逻辑命名输出。
<fileset id="stylesheets-to-preprocess" dir="${basedir}">
<filename name="src/xslt/backends/js/StatePatternStatechartGenerator.xsl"/>
<filename name="src/xslt/backends/js/StateTableStatechartGenerator.xsl"/>
<filename name="src/xslt/backends/js/SwitchyardStatechartGenerator.xsl"/>
</fileset>
<!-- ... -->
<target name="preprocess-stylesheets" depends="init">
<xslt
classpathref="xslt-processor-classpath"
style="src/xslt/util/preprocess_import.xsl"
destdir="build"
scanincludeddirectories="false">
<fileset refid="stylesheets-to-preprocess"/>
<mapper>
<chainedmapper>
<flattenmapper/>
<globmapper from="*.xsl" to="*_combined.xsl"/>
</chainedmapper>
</mapper>
</xslt>
</target>
我想要的是限制它,以便只处理文件集中指定的那些文件。
删除映射器,以便文件集是唯一的嵌套元素,将导致ant尝试将转换应用于每个文件,即使没有xsl扩展名的文件,在尝试转换非xml文档时也不可避免地失败。
我正在使用ant 1.7.1。任何指导都将不胜感激。
答案 0 :(得分:2)
您的问题是由隐式文件集功能引起的。要使用嵌套文件集参数,您需要关闭此功能。
我还建议在文件集中使用“include”参数,这要简单得多,并且不需要复杂的mapper元素(必须指定生成文件的扩展名,否则默认为.html)
<target name="preprocess-stylesheets" depends="init">
<xslt
classpathref="xslt-processor-classpath"
style="src/xslt/util/preprocess_import.xsl"
destdir="build"
extension=".xsl"
useImplicitFileset="false"
>
<fileset dir="src/xslt/backends">
<include name="StatePatternStatechartGenerator.xsl"/>
<include name="StateTableStatechartGenerator.xsl"/>
<include name="SwitchyardStatechartGenerator.xsl"/>
</fileset>
</xslt>
</target>