Как я могу превратить структуру файла XML в структуру папок, используя ANT - PullRequest
0 голосов
/ 28 апреля 2010

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

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

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

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

folder1
   -folder1-1
folder2
folder3
   -folder3-1 

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

1 Ответ

1 голос
/ 29 апреля 2010

Один из вариантов - использовать задачу 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...