2010-04-28 22 views
0

J'aimerais pouvoir passer un fichier XML à un script de construction ANT et lui faire créer une structure de dossiers imitant la structure nodale du XML, en utilisant le répertoire parent des fichiers de construction en tant que racine.Comment puis-je transformer la structure d'un fichier XML en une structure de dossier en utilisant ANT

par exemple en utilisant:

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

fourmi créer:

folder1 
    -folder1-1 
folder2 
folder3 
    -folder3-1 

Je sais comment créer un répertoire, mais je ne suis pas sûr de savoir comment avoir ANT parser XML.

Répondre

1

Une option serait d'utiliser la tâche xslt pour faire le gros du travail. Par exemple, générez un deuxième script ant et invoquez-le.

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> 

place mkdir.xslt dans le même répertoire que 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> 

Exemple de sortie mkdir.build.xml de la tâche 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> 

Je ne parle pas couramment XSLT, donc il pourrait être possible d'améliorer la boucle for-each.

+0

Merci. C'est parfait. – Undistraction