2010-04-28 39 views
0

我希望能夠將XML文件傳遞給ANT構建腳本,並讓它創建一個模擬XML的節點結構的文件夾結構,使用構建文件父目錄作爲根。如何將XML文件的結構轉換爲使用ANT的文件夾結構

對於使用實例:

<root> 
    <folder1> 
     <folder1-1/> 
    </folder1> 
    <folder2/> 
    <folder3> 
     <folder3-1/> 
    </folder3> 
</root> 

螞蟻會造成:

folder1 
    -folder1-1 
folder2 
folder3 
    -folder3-1 

我知道如何創建一個目錄,但我不知道如何有ANT解析XML。

回答

1

一個選擇是使用xslt任務來完成繁重工作。例如,生成第二個ant腳本並調用它。

的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>&#10;</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>&#10;</xsl:text> 

    <xsl:apply-templates/> 
    </xsl:template> 
</xsl:transform> 

從xslt任務輸出

例mkdir.build.xml:在相同的目錄中的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

<?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循環。

+0

謝謝。那很完美。 – Undistraction 2010-04-29 12:40:40