Как я могу превратить структуру файла XML в структуру папок с помощью ANT

Я хотел бы иметь возможность передавать файл XML в сценарий сборки ANT и создавать структуру папок, имитирующую узловую структуру XML, используя родительский каталог файлов сборки в качестве корня.

Например, используя:

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

муравей создаст:

folder1
   -folder1-1
folder2
folder3
   -folder3-1 

Я знаю, как создать каталог, но не знаю, как заставить ANT анализировать XML.


person Undistraction    schedule 28.04.2010    source источник


Ответы (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>&#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>

Пример вывода mkdir.build.xml из задачи 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 можно было бы улучшить.

person Brett Kail    schedule 29.04.2010