XSLT Transformer plusieurs fichiers de sous-répertoire

J'ai créé un fichier XSLT permet de transformer un fichier XML unique. Cependant, j'ai plusieurs centaines de répertoires avec plusieurs fichiers xml. Est-il possible de XSLT pour transformer tous ces fichiers. Je suis l'aide de la fonction de collecte pour obtenir une liste de tous les fichiers. Mais, vous ne savez pas comment appliquer la transformation maintenant.

Voici mon exemple de fichier XSLT. Fondamentalement, je veux une boucle sur tous les fichiers xml et d'appliquer le modèle de tableau sur le fichier individuel. La sortie de toutes ces transformations ont besoin d'être dans un seul fichier texte.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://whatever">
<xsl:output method="text" encoding="ISO-8859-1"/>
<xsl:template name="process">
<xsl:variable name="files" select="collection('file:///C:/files/testResults?select=*.xml;recurse=yes')"/>
<xsl:for-each select="$files">
<xsl:if test="(not(contains(document-uri(.), 'SuiteSetUp'))) and (not(contains(document-uri(.), 'SuiteTearDown')))">
<xsl:value-of select="tokenize(document-uri(.), '/')[last()]"></xsl:value-of>
<xsl:apply-templates select="/testResults/result/tables/table[14]">
<xsl:with-param name="title" select="/testResults/rootPath"></xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="/testResults/result/tables/table[15]"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template match="table">
<xsl:param name="testName"></xsl:param>
<xsl:for-each select="row">
<xsl:if test="position() > 2">
<xsl:variable name="choices" select="col[2]"></xsl:variable>
<xsl:if test="contains($choices, 'fail')">
<xsl:value-of  select="$testName"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="col[1]"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="foo:getCorrectChoices(col[2])"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:value-of select="foo:getExpectedChoices(col[2])"></xsl:value-of>
<xsl:text>|</xsl:text>
<xsl:call-template name="NewLine"/>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="NewLine">
<xsl:text>&#xA;</xsl:text>
</xsl:template>
<xsl:function name="foo:getCorrectChoices">
<xsl:param name="content"></xsl:param>
<xsl:analyze-string select="$content" regex="\[(\[.+?\])\] fail">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"></xsl:value-of>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:function>
<xsl:function name="foo:getExpectedChoices">
<xsl:param name="content"></xsl:param>
<xsl:analyze-string select="$content" regex="fail\(expected \[(\[.+?\])\]">
<xsl:matching-substring>
<xsl:value-of select="regex-group(1)"></xsl:value-of>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:function>
</xsl:stylesheet>
Quel type de processeur XSLT utilisez-vous? Si vous êtes en utilisant Saxon, vous pouvez le faire à partir de la ligne de commande directement. Saxon est capable de transformer des lots de fichiers pour lesquels vous voulez appliquer la même transformation.
J'ai été en utilisant un XSLT de l'éditeur appelé EditX pour construire mon XSLT et de la pensée, peut-être que je peux l'exécuter à partir de là. Mais on dirait que j'ai besoin de l'exécuter à partir de quelque part d'autre. J'ai vu une tâche ant pour XSLT. Ce travail?
Quel système d'exploitation êtes-vous sur?

OriginalL'auteur user320587 | 2011-05-25