我最近创建了一个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文件。遗憾。
答案 0 :(得分:3)
您不需要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>
您也可以使用mappers将输入文件的名称转换为输出文件名。
另一个当然是使用属性作为输入文件名,然后让某人将文件名传递给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