我最近创建了一个ANT构建文件,使用xslt将.xml文件转换为。fo。ANT构建按照设计执行。但是,输入文件是硬编码到XSLT任务中的。
如何动态更改输入文件名,而不必每次编辑构建文件?下面是我的代码片段:
<target name="createFO"
description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
<xslt basedir="${srcdir}"
destdir="${dstDir}"
extension=".fo"
style="${ss}/foobar.xsl"
in="sample.xml"
out="${dstDir}/new.fo"/>
<echo>The fo file has been created!</echo>
</target>
我没有提到我正在使用OxygenXML来处理我的ANT文件。对不起。
您不需要in
和out
属性。相反,您可以使用包含要转换的文件的<fileset>
。
<xslt>
将从您的输入文件中删除后缀,并应用extension
属性中使用的后缀。
<target name="createFO"
description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
<!-- Don't put "basedir" parameter. It comes from fileset! -->
<xslt destdir="${dstDir}"
extension=".fo"
style="${ss}/foobar.xsl">
<fileset dir="${xslt.dir}"/>
</xslt>
<echo>The fo file has been created!</echo>
</target>
您也可以使用映射器将输入文件名转换为输出文件名。
另一种当然是使用属性作为输入文件名,然后让某人将文件名传递到Ant脚本中:<target name="createFO"
description="Transform using XSLT 1.0" depends="clean, copyimg, copysrc">
<fail message="You must pass in the parameter &auot;-Dxml.file=..."">
<condition>
<not>
<available file="${xml.file}">
</condition>
</fail>
<xslt basedir="${srcdir}"
destdir="${dstDir}"
extension=".fo"
style="${ss}/foobar.xsl"
in="${xml.file}"
out="${dstDir}/new.fo"/>
<echo>The fo file has been created!</echo>
</target>
现在,要运行这个,你可以这样做:
$ ant -Dxml.file=sample.xml createFO