首先,请原谅我糟糕的英语。
问题在于:我有一个目录stylesheet-dir
,其中我有未定义的xsl
个文件,每个文件都有不同的名称。
我需要的是xslt任务进行转换的次数与目录中的文件一样多。到目前为止,这应该做的很好:
<target name="do-report">
<xslt basedir="${stylesheet-dir}" destdir="${output_dir}" style="stylesheet.xsl" force="true">
<classpath location="${processor_path}"/>
</xslt>
</target>
^^以上的问题^^,stylesheet.xsl
对于每个转换是相同的。
我需要样式表在每个转换中保持一致。最有趣的部分是输入文件和样式表应该是相同的。
我通过互联网寻找解决方法但没有成功。很感谢任何形式的帮助。
答案 0 :(得分:0)
Ant不是一种脚本语言,只能对迭代文件集提供有限的支持,例如apply task。在这些情况下,我会找到一个嵌入式groovy脚本,它能够调用其他ANT任务。
├── build.xml
├── src
│ ├── xml
│ │ ├── file1.xml
│ │ ├── file2.xml
│ │ └── file3.xml
│ └── xsl
│ ├── file1.xsl
│ └── file2.xsl
└── target
├── xsl1
│ ├── file1.xml
│ ├── file2.xml
│ └── file3.xml
└── xsl2
├── file1.xml
├── file2.xml
└── file3.xml
<project name="demo" default="build">
<available classname="org.codehaus.groovy.ant.Groovy" property="groovy.installed"/>
<target name="build" depends="install-groovy">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
<fileset id="xslfiles" dir="src/xsl" includes="*.xsl"/>
<fileset id="xmlfiles" dir="src/xml" includes="*.xml"/>
<groovy>
def count = 1
project.references.xslfiles.each { xsl ->
project.references.xmlfiles.each { xml ->
def xslfile = new File(xsl.toString())
def xmlfile = new File(xml.toString())
def outfile = new File("target/xsl${count}", xmlfile.name)
ant.xslt(force:true, style:xslfile, in:xmlfile, out:outfile)
}
count++
}
</groovy>
</target>
<target name="install-groovy" unless="groovy.installed">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.4.5/groovy-all-2.4.5.jar"/>
<fail message="groovy has been installed. Run the build again"/>
</target>
</project>