ここまではテンプレートが1つしかないスタイルシートを扱ってきましたが、 実際には複数のテンプレートを記述することができます。 テンプレートが複数ある場合、match="/"、つまり文書全体にマッチするテンプレートが最初に選択されます。
次の例を見てみましょう。
ここでは、HTML文書に変換する場合のXSLスタイルシートを詳しく見てみます。
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" /><xsl:template match="/"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Rock Festivals</title> </head> <body> <xsl:apply-templates select="festivals"/> </body> </html> </xsl:template><xsl:template match="festivals"> <h1>国内ロックフェスティバル</h1> <xsl:apply-templates select="festival"/> </xsl:template><xsl:template match="festival"> <h2><xsl:value-of select="name"/></h2> <h3>出演予定バンド/アーティスト</h3> <ul> <xsl:apply-templates select="bands/band"/> </ul> </xsl:template><xsl:template match="band"> <li><xsl:value-of select="."/></li> </xsl:template>
</xsl:stylesheet>
この例では 4つの template 要素があります。 template 要素では、そのテンプレートがどの要素を処理する際のテンプレートであるかを match 属性の値で指定します。 この例では、 /, festivals, festival, band の4つの要素を変換する際のテンプレートが記述されています。
ここでポイントとなるのは次の表現です。
<xsl:apply-templates select="festivals"/>
XSLプロセッサは、 文書全体("/")に適用するテンプレートを処理していると、 この xsl:apply-templates に遭遇します。 ここで、"/"に対するテンプレートの処理は一時中断し、 select属性で指定されている "festivals" に対してテンプレートの適用を行います。
XSLプロセッサがテンプレートを適用中の要素をカレントノードまたは文脈ノードと呼びます。 この例では、最初はカレントノードが"/"ですが、 select="festivals"によって処理が"festivals"のテンプレートに移り、 カレントノードは"/"の子要素の"festivals"になります。
select属性で指定したノード以下からテキストを取り出すことができます。
<xsl:value-of select="式 "/>
式 を「.」とすれば、カレントノードからテキストを取り出せます。
select属性で指定したノード以下のすべてを出力文書にコピーすることができます。
<xsl:copy-of select="式 "/>