He creado un archivo XSLT que puede transformar un solo archivo XML. Sin embargo, tengo varios cientos de directorios con múltiples archivos xml. ¿Hay alguna forma en XSLT para transformar todos estos archivos? Estoy usando la función de recopilación para obtener una lista de todos los archivos. Pero no estoy seguro de cómo aplicar la transformación ahora.XSLT Transformar varios archivos desde el subdirectorio
Aquí está mi ejemplo de archivo XSLT. Básicamente, quiero recorrer todos los archivos xml y aplicar la tabla de plantillas en el archivo individual. El resultado de todas estas transformaciones debe estar en un solo archivo de texto plano.
<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>
</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>
¿Qué tipo de procesador XSLT está utilizando? Si está usando Saxon, puede hacerlo directamente desde la línea de comando. Saxon puede transformar lotes de archivos para los cuales desea aplicar la misma transformación. –
Estaba usando un editor XSLT llamado EditX para construir mi XSLT y pensé que quizás podría ejecutarlo desde allí. Pero parece que necesito ejecutar esto desde otro lugar. Vi una tarea de hormiga para XSLT. ¿Eso funcionará? – user320587
¿Con qué sistema operativo estás corriendo? –