1<?xml version="1.0"?>
2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                xmlns:exsl="http://exslt.org/common"
4                version="1.0">
5
6<xsl:key name="tmpls" match="xsl:template" use="@name"/>
7
8<xsl:template match="/">
9  <xsl:element name="initial">
10    <xsl:text>Mode of FOO is </xsl:text>
11    <xsl:value-of select="key('tmpls', 'FOO')/@mode"/>
12  </xsl:element>
13
14  <xsl:variable name="fiddle">
15    <xsl:apply-templates select="//xsl:template"/>
16  </xsl:variable>
17
18  <xsl:apply-templates select="exsl:node-set($fiddle)" mode="faddle"/>
19</xsl:template>
20
21<xsl:template match="xsl:template">
22  <xsl:copy>
23    <xsl:copy-of select="@*"/>
24    <xsl:attribute name="mode">fiddled</xsl:attribute>
25  </xsl:copy>
26</xsl:template>
27
28<xsl:template match="/" mode="faddle">
29  <xsl:element name="post-transform">
30    <xsl:text>Mode of FOO is </xsl:text>
31    <xsl:value-of select="key('tmpls', 'FOO')/@mode"/>
32  </xsl:element>
33</xsl:template>
34
35<xsl:template name="FOO" mode="input"/>
36
37</xsl:stylesheet>
38