У меня есть только базовые навыки XSLT, поэтому извиняюсь, если это является базовым или невозможным.
У меня есть шаблон paginator, который используется везде на сайте, который я просматриваю.Есть ошибка, когда одному конкретному поиску нужно добавить параметр categoryId, добавленный к href ссылок на страницы. Я не могу изменить таблицу стилей paginator , иначе я бы просто добавил к ней параметр.Я хотел бы применить шаблон как есть, а затем выполнить второе преобразование на основе его выходных данных.Это возможно?Как обычно другие расширяют шаблоны библиотек?
До сих пор я думал о создании рекурсивной копии выходных данных и применении шаблона к hrefs по мере их обработки.Синтаксис этого несколько ускользает от меня, тем более что я даже не уверен, что это возможно.
Редактировать - Между ответом Дабблера и комментарием Майкла Кея мы туда попали.Вот мой полный тест.
<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>