Descripción general de la recursión de XSLT
La XSLT depende de la recursión como mecanismo de bucle. La recursión se produce cuando una sección del código se llama a sí misma, directa o indirectamente. Tanto las plantillas con nombre como las no identificadas pueden usar recursión, y diferentes plantillas pueden usar la recursión mutua, una llama a otra que, a su vez, llama a la primera.
Para evitar la recursión infinita y el consumo excesivo de recursos del sistema, el proceso de administración de Junos OS (mgd) limita la recursión máxima a 5000 niveles. Si se alcanza este límite, se produce un error en la secuencia de comandos.
En el ejemplo siguiente, una plantilla sin nombre coincide en un <count> elemento. A continuación, llama a la <count-to-max> plantilla, pasando el valor del count elemento como max. La <count-to-max> plantilla comienza declarando los max parámetros y cur estableciendo el valor predeterminado de cada uno en 1 (uno). Aunque el valor max predeterminado opcional es uno, la plantilla utilizará el valor pasado de la count plantilla. Luego, el valor actual de cur se emite en un <out> elemento. Por último, si cur es menor que max, la <count-to-max> plantilla se invoca recursivamente, pasando cur + 1 como cur. Esta pasada recursiva, a continuación, produce el siguiente número y repite la recursión hasta cur que sea maxigual.
<xsl:template match="count"> <xsl:call-template name="count-to-max"> <xsl:with-param name="max" select="."/> </xsl:call-template> </xsl:template> <xsl:template name="count-to-max"> <xsl:param name="cur" select="'1'"/> <xsl:param name="max" select="'1'"/> <out><xsl:value-of select="$cur"/></out> <xsl:if test="$cur < $max"> <xsl:call-template name="count-to-max"> <xsl:with-param name="cur" select="$cur + 1"/> <xsl:with-param name="max" select="$max"/> </xsl:call-template> </xsl:if> </xsl:template>
Dado un max valor de 10, los valores contenidos en la <out> etiqueta son 1, 2, 3, 45, 6, 7, 8, 9, y 10.