我希望能够将XML文件传递给ANT构建脚本,并使用构建文件父目录作为根目录创建一个模仿XML节点结构的文件夹结构。
例如:
<root>
<folder1>
<folder1-1/>
</folder1>
<folder2/>
<folder3>
<folder3-1/>
</folder3>
</root>
ant会创建:
folder1
-folder1-1
folder2
folder3
-folder3-1
我知道如何创建目录,但我不确定如何让ANT解析XML。
答案 0 :(得分:1)
一种选择是使用xslt任务来完成繁重的任务。例如,生成第二个ant脚本并调用它。
的build.xml:
<project default="mkdirs">
<target name="mkdirs">
<xslt style="mkdir.xslt" in="dirs.xml" out="mkdir.build.xml"/>
<ant antfile="mkdir.build.xml"/>
</target>
</project>
将mkdir.xslt放在与build.xml相同的目录中:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="text()"/>
<xsl:template match="root">
<project><xsl:text> </xsl:text>
<xsl:apply-templates/>
</project>
</xsl:template>
<xsl:template match="*">
<mkdir>
<xsl:attribute name="dir">
<xsl:for-each select="ancestor::*">
<xsl:if test="position() != 1">
<xsl:value-of select="name()"/>
<xsl:text>/</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:value-of select="name()"/>
</xsl:attribute>
</mkdir><xsl:text> </xsl:text>
<xsl:apply-templates/>
</xsl:template>
</xsl:transform>
xslt任务的示例mkdir.build.xml输出:
<?xml version="1.0" encoding="UTF-8"?><project>
<mkdir dir="folder1"/>
<mkdir dir="folder1/folder1-1"/>
<mkdir dir="folder2"/>
<mkdir dir="folder3"/>
<mkdir dir="folder3/folder3-1"/>
</project>
我不熟悉XSLT,因此可以改进for-each循环。