我有一个合并外部文档的XSL样式表,这种方式
<xsl:copy-of select="document('snippets.xml')/snippets/xxxx/form"/>
如果文件或其任何依赖项发生更改,我希望重建XSLT Ant构建任务。
当前的Ant任务看起来像这样
<xslt basedir="xxxx/pages/${doc.locale}"
destdir="xxxx/dir/${doc.locale}"
includes="*.xml"
excludes="snippets.xml"
style="build/xxxx/${doc.locale}/myStyle.xsl">
<param name="lang" expression="${doc.locale}"/>
<xmlcatalog refid="docDTDs"/>
基本上,如果更改了snippets.xml文档,我想重建。
答案 0 :(得分:2)
Ant有一个uptodate
任务,用于从一组源文件中检查目标是否是最新的,文件模式化的。我不完全清楚你的依赖是什么,因为XSLT任务可以创建多个文件(导致多个目标),或者如果它创建一个文件。你的一条评论意味着一个文件。
以下是使用uptodate
的一种方法。您基本上使用该任务来设置可以放在目标的unless
属性中的属性:
<property name="file.that.depends.on.snippets"
location="some/path"/>
<property name="snippets.file"
location="xxxx/pages/${doc.locale}/snippets.xml"/>
<target name="process-snippets"
unless="snippets.uptodate"
depends="snippets-uptodate-check">
<xslt basedir="xxxx/pages/${doc.locale}"
destdir="xxxx/dir/${doc.locale}"
includes="*.xml"
excludes="snippets.xml"
style="build/xxxx/${doc.locale}/myStyle.xsl">
<param name="lang" expression="${doc.locale}"/>
<xmlcatalog refid="docDTDs"/>
</xslt>
</target>
<target name="snippets-uptodate-check">
<uptodate property="snippets.uptodate"
targetfile="$file.that.depends.on.snippets">
<srcfiles dir="xxxx/pages/${doc.locale}"
includes="*.xml"
excludes="snippets.xml"/>
</uptodate>
</target>
答案 1 :(得分:-1)
XSLT task默认情况下应该为您执行此操作。它有一个可选的“强制”属性
重新创建目标文件,即使它们也是如此 比他们相应的更新 源文件或样式表
默认为false。因此,默认情况下,除非使用“force”属性覆盖,否则XSLT任务将检查依赖项。