Ant と XSLT だけを使用して、特定のディレクトリにある XML ファイルのリストである XML ファイルを作成したいと考えています。
Antのconcat
タスクは、XMLではないリストになるため、仕事をしません。単一のルート要素はありません。
関数を使用する XSLT Ant タスクを使用して適用する XSLT ファイルがありますcollection()
。これはまさに私が望む結果を生成しますが、ターゲットディレクトリ内の各ファイルに対してそうしようとします.1つのリストだけが必要です. 私の XSLT は、ターゲット ディレクトリ (コレクション) 内のすべてのファイルで動作しています。XSLT が適用される回数を制限するにはどうすればよいですか?
これが私がこれまでに持っているものです:
XML ファイルはターゲット ディレクトリにありますc:\tmp
これは、(Ant XSLT タスクを使用して) ターゲット ディレクトリ内のファイルに適用する XSL ファイルです。
<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>