2010-08-21 27 views
0

我正在尝试使用ant来使用XSLT预处理我的项目中的三个特定样式表。 Ant documentation for the xslt task表示它应该能够接受任何资源收集。具体来说,它说:如何在ant中指定xml文档进行资源收集转换?

使用资源集合来指定样式表应该应用到的资源。使用嵌套映射器和任务的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。任何指导将不胜感激。

回答

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>