【发布时间】:2013-09-25 13:29:14
【问题描述】:
仅使用 Ant 和 XSLT,我想创建一个 XML 文件,它是特定目录中 XML 文件的列表。
Ant 的concat 任务没有完成这项工作,因为我最终得到了一个不是 XML 的列表——即。它没有单个根元素。
我有一个使用 XSLT Ant 任务应用的 XSLT 文件,该任务使用 collection() 函数。这会产生我想要的结果,但它会尝试对目标目录中的每个文件都这样做——我只想要一个列表。我的 XSLT 正在对目标目录(集合)中的每个文件进行操作——如何限制应用 XSLT 的次数?
这是我目前所拥有的:
XML 文件在目标目录c:\tmp
这是我应用于目标目录中文件的 XSL 文件(使用 Ant XSLT 任务);
<xsl:template match="/">
<xsl:call-template name="generatelist" />
</xsl:template>
<xsl:template name="generatelist">
<xsl:result-document href="list.xml">
<xsl:element name="list">
<xsl:element name="dir">
<xsl:for-each
select="collection('file:///C:/tmp?select=*.xml')">
<xsl:element name="file">
<xsl:attribute name="name">
<xsl:value-of select="tokenize(document-uri(.), '/')[last()]" />
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:result-document>
</xsl:template>
这是生成的 XML 列表:
<list>
<dir>
<file name="filename_1.xml"/>
<file name="filename_2.xml"/>
. . .
<file name="filename_n.xml"/>
</dir>
</list>
谢谢。
画了
添加我正在使用的 Ant XSLT 任务:
<xslt basedir="${staging_2}"
destdir="${staging_3}" extension=".xml" includes="**/*.xml"
style="create_list.xsl">
</xslt>
【问题讨论】:
-
所以 XSLT 似乎没有任何问题,问题出在调用它的 Ant 代码中。你能发布你的build.xml的相关sn-p吗?
-
感谢您的快速回复,Ian -- 我已添加 XSLT 任务。
-
当 XML 文件位于相对路径(例如,在 ${BUILDDIR}/files 而不是 C:\Tmp 中)时,你到底是如何让它工作的?我试过类似
collection(iri-to-uri('./files/?select=*.xml'),但不是这样。