Разбор тега fileset в XML с помощью Ant и присоединение пути

У меня есть 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

Есть идеи, как мне этого добиться:)

2 ответа

Если у вас есть возможность включить <fileset> теги в вашем файле build.xml, вы можете создать текстовые файлы, содержащие содержимое наборов файлов следующим образом.

<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>

Попробуй это:

Файл сборки:

<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
Другие вопросы по тегам