<xsl:template> 要素

特定の型とコンテキストのノードに対して必要な出力を生成するために再利用可能なテンプレートを定義します。

<xsl:template
  name= Qname
  match = Pattern
  priority = number
  mode = QName
</xsl:template>

属性

  • name
    展開される修飾名 (XSLT)。 名前にプレフィックスが含まれている場合は、名前が出現する属性で有効になっている名前空間宣言を使って、プレフィックスが URI (Uniform Resource Identifier) 参照に展開されます。 名前のローカル部分および場合によっては null URI 参照から構成される展開名は、テンプレートの名前として使用されます。 既定の名前空間は、プレフィックスの付かない名前に対して使用されていません。 <xsl:template> 要素が name 属性を持っている場合は、必須要件ではありませんが、match 属性も持つことができます。

  • match
    規則の適用対象となるソース ノードまたはノードを識別する パターン (XSLT)。 <xsl:template> 要素が name 属性を持っていなければ、必ず match 属性を指定する必要があります。 <xsl:template> 要素のコンテンツは、テンプレート規則が適用されるときにインスタンス化されるテンプレートです。

  • priority
    テンプレートの優先順位番号。 一致するテンプレート規則のうち、優先順位が最も高いテンプレート規則より優先順位の低いものが適用対象から除外されます。 この値は、0 ~ 9 の実数 (正または負) であり、省略可能なマイナス記号 (-) が先頭に付いた生成番号と一致している必要があります。 既定の優先順位は、次のように計算されます。

    • | で区切られた複数の選択肢がパターンに含まれている場合、そのパターンは、選択肢ごとに 1 つのテンプレート規則が存在するテンプレート規則の集合と同等に扱われます。

    • パターンの形式が child 軸指定子または attribute 軸指定子が前に付いた Qname である場合、あるいは child 軸指定子または attribute 軸指定子が前に付いたリテラル処理命令である場合、優先順位は 0 になります。

    • パターンが child 軸指定子または attribute 軸指定子が前に付いた名前である場合、優先順位は -0.25 になります。

    • それ以外の場合で、パターンが child 軸指定子または attribute 軸指定子が前に付いたノード テストのみから構成される場合、優先順位は -0.5 になります。

    • それ以外の場合、優先順位は 0.5 になります。

    したがって、最も一般的な種類のパターン (特定の型と特定の展開名を持つノードをテストするパターン) は、優先順位が 0 になります。 その次に特殊性の低い種類のパターン (特定の型と特定の名前空間 URI が含まれた展開名を持つノードをテストするパターン) は、優先順位が -0.25 になります。 それより特殊性の低いパターン (特定の型を持つノードをテストするだけのパターン) は、優先順位が -0.5 になります。 最も一般的な種類のパターンより特殊性が高いパターンは、優先順位が 0.5 になります。

  • モード
    モード値。 この値を指定することで、要素を複数回処理し、毎回違う結果を生成することができます。 <xsl:template> は、match 属性を持っていない限り、mode 属性を持つことはできません。 mode 属性を持っている <xsl:apply-templates> 要素は、同じ値の mode 属性を持っている <xsl:template> 要素のテンプレート規則にのみ適用されます。mode 属性を持っていない <xsl:apply-templates> 要素は、mode 属性を持っていない <xsl:template> 要素のテンプレート規則にのみ適用されます。

要素情報

出現回数

無制限

親要素

xsl:stylesheetxsl:transform

子要素

xsl:apply-importsxsl:apply-templatesxsl:attributexsl:call-templatexsl:choosexsl:commentxsl:copyxsl:copy-ofxsl:elementxsl:fallbackxsl:for-eachxsl:ifxsl:messagexsl:numberxsl:paramxsl:processing-instructionxsl:textxsl:value-ofxsl:variable、出力要素

解説

テンプレートは、XML のフラグメントを生成するだけであり、完全な XML ドキュメントを生成する必要はありません (transformNodeToObject を使用しない限り、ルート テンプレートの場合も同様です)。 テンプレートには、囲まれていないテキストまたはテンプレートで定義されている複数のドキュメント要素を含めることができます。 そのため、アプリケーションでさらに加工できる未加工のテキストと XML フラグメント (たとえば HTML ページに挿入される HTML フラグメントなど) を容易に生成できます。

name 属性の値は、展開されている QName です。 名前にプレフィックスが含まれている場合は、名前が出現する属性で有効になっている名前空間宣言を使って、プレフィックスが URI 参照に展開されます。 名前のローカル部分および場合によっては null URI 参照から構成される展開名は、テンプレートの名前として使用されます。 既定の名前空間は、プレフィックスの付かない名前に対して使用されていません。

<xsl:template> 要素が name 属性を持っている場合は、必須要件ではありませんが、match 属性も持つことができます。 <xsl:call-template> 要素は名前でテンプレートを呼び出すため、呼び出されるテンプレートを識別する name 属性を持っている必要があります。 <xsl:apply-templates> と異なり、<xsl:call-template> は現在のノードまたは現在のノード リストを変更しません。

スタイル シートに同じ名前のテンプレートが複数含まれていると、エラーが発生します。

使用例

このテンプレート規則には、<stock> 要素を指定し、STYLE="font-weight:bold" 属性を備えた出力 <DIV> 要素を生成するパターンが含まれています。

XML ファイル (portfolio.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="templ.xsl"?>
<portfolio xmlns:dt="urn:schemas-microsoft-com:datatypes" xml:space="preserve">
  <stock exchange="nyse">
    <name>zacx corp</name>
    <symbol>ZCXM</symbol>
    <price dt:dt="number">28.875</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zaffymat inc</name>
    <symbol>ZFFX</symbol>
    <price dt:dt="number">92.250</price>
  </stock>
  <stock exchange="nasdaq">
    <name>zysmergy inc</name>
    <symbol>ZYSZ</symbol>
    <price dt:dt="number">20.313</price>
  </stock>
</portfolio>

XSLT ファイル (templ.xsl)

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="stock">
   <DIV STYLE="font-weight:bold">
      Symbol: <xsl:value-of select="symbol" />, 
      Price: <xsl:value-of select="price" />
   </DIV>
</xsl:template>

</xsl:stylesheet>

出力

これは書式付き出力です。

Symbol: ZCXM, Price: 28.875

Symbol: ZFFX, Price: 92.250

Symbol: ZYSZ, Price: 20.313