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 max
igual.
<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
, 4
5
, 6
, 7
, 8
, 9
, y 10
.