我有一个像这样的xml文件(myxml.xml)
<fileset dir ="C:\dir1">
<include name="abc.txt">
<include name ="def.txt">
</fileset>
<fileset dir ="C:\dir2">
<include name="abc2.txt">
<include name ="def2.txt">
</fileset>
我想使用我的Ant build.xml解析这个文件,并希望创建两个txt文件,如text1.txt和text2.txt,内容如下
text1.txt
C:\dir1\abc.txt
C:\dir1\def.txt
和 text2.txt 应该有
C:\dir2\abc2.txt
C:\dir2\def2.txt
我知道如何实现这一点:)
答案 0 :(得分:0)
如果您可以选择在build.xml文件中包含<fileset>
标记,则可以创建包含文件集内容的文本文件,如下所示。
<target name="create-text1">
<fileset dir="C:\dir1" id="dir1.files">
<include name="abc.txt" />
<include name ="def.txt" />
</fileset>
<pathconvert pathsep="${line.separator}"
property="text1" refid="dir1.files"/>
<echo file="text1.txt" message="${text1}" />
</target>
<target name="create-text2">
<fileset dir="C:\dir2" id="dir2.files">
<include name="abc2.txt" />
<include name ="def2.txt" />
</fileset>
<pathconvert pathsep="${line.separator}"
property="text2" refid="dir2.files"/>
<echo file="text2.txt" message="${text2}" />
</target>
答案 1 :(得分:0)
试试这个:
构建文件:
<project default="createfile2">
<target name="createfile1">
<xslt in="myxml.xml" out="text1.txt" style="test1.xslt">
<param name="d" expression="C:\dir1"/>
</xslt>
</target>
<target name="createfile2" depends="createfile1">
<xslt in="myxml.xml" out="text2.txt" style="test1.xslt">
<param name="d" expression="C:\dir2"/>
</xslt>
</target>
</project>
XSLT转换
<?xml version="1.0" standalone="yes"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="d"/>
<xsl:output omit-xml-declaration="yes" method="html" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root/fileset[@dir=$d]">
<xsl:for-each select="include">
<xsl:value-of select="$d"/>\<xsl:value-of select="@name"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出文件
text1.txt
C:\dir1\abc.txt
C:\dir1\def.txt
text2.txt
C:\dir2\abc2.txt
C:\dir2\def2.txt