Tengo solo conocimientos básicos de XSLT, así que le pido disculpas si esto es básico o imposible.Cómo hacer una segunda transformación en la salida de una plantilla XSLT
Tengo una plantilla de paginador que se utiliza en todas partes del sitio que estoy viendo. Hay un error en el que una búsqueda en particular necesita tener un parámetro categoryId adjunto al href de los enlaces de la página. No puedo alterar la hoja de estilo del paginador o de lo contrario solo le agregaré un parámetro. Lo que me gustaría hacer es aplicar la plantilla como luego hacer una segunda transformación en función de su resultado. es posible? ¿Cómo van normalmente los demás a extender plantillas de biblioteca?
Hasta ahora he pensado en hacer una copia recursiva de la salida y aplicar una plantilla a los hrefs a medida que se procesan. La sintaxis de eso se me escapa un poco, sobre todo porque ni siquiera estoy seguro de que sea posible.
Editar - Entre la respuesta de Dabbler y el comentario de Michael Kay llegamos allí. Aquí está mi prueba completa.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common">
<!-- note we require the extensions for this transform -->
<!--We call the template to be extended here and store the result in a variable-->
<xsl:variable name="output1">
<xsl:call-template name="pass1"/>
</xsl:variable>
<!--The template to be extended-->
<xsl:template name="pass1">
<a href="url?param1=junk">foo</a>
</xsl:template>
<!--the second pass. we lock this down to a mode so we can control when it is applied-->
<xsl:template match="a" mode="pass2">
<xsl:variable name="href" select="concat(@href, '&', 'catid', '=', 'stuff')"/>
<a href="{$href}"><xsl:value-of select="."/></a>
</xsl:template>
<xsl:template match="/">
<html><head></head><body>
<!--the node-set extension function turns the first pass back into a node set-->
<xsl:apply-templates select="ext:node-set($output1)" mode="pass2"/>
</body></html>
</xsl:template>
</xsl:stylesheet>
y se puede hacer lo mismo en XSLT 1.0 con cualquier procesador que ofrece la exsl: conjunto de nodos() extensión: basta con sustituir la selección en las apply-templates con select = "exsl: node-set ($ MyVar)". –