Mam tylko podstawowe umiejętności XSLT, więc przepraszam, jeśli jest to albo podstawowe, albo niemożliwe.Jak wykonać drugą transformację na wyjściu szablonu XSLT
Mam szablon paginatora, który jest używany wszędzie na stronie, na którą patrzę. Występuje błąd, w którym jedno konkretne wyszukiwanie musi mieć parametr categoryId dołączony do href linku do strony. Nie mogę zmienić arkusza stylów paginatora, inaczej po prostu dodałbym do niego parametr. Chciałbym zastosować szablon, a następnie wykonać drugą transformację na podstawie jej wyników. czy to możliwe? W jaki sposób inni zwykle korzystają z rozszerzania szablonów bibliotecznych?
Do tej pory zastanawiałem się nad wykonaniem rekurencyjnej kopii danych wyjściowych i zastosowaniem szablonu do hrefów podczas ich przetwarzania. Składnia tego mi ucieka, szczególnie, że nie jestem nawet pewien, czy to możliwe.
Edytuj - Pomiędzy odpowiedzią Dabblera i komentarzem Michaela Kaya, dotarliśmy na miejsce. Oto mój pełny test.
<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>
I można zrobić to samo w XSLT 1.0 z dowolnym procesorem, który oferuje exsl: node-set() Rozszerzenie: wystarczy wymienić wybierz w apply-templates z select = "exsl: node-set ($ MyVar)". –