Разбор тега 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