検索
連載

XSLTテンプレートをインクルードするXMLテクニック集(6)(3/3 ページ)

Share
Tweet
LINE
Hatena
前のページへ |       

XSLTテンプレートの機能を継承する

アイコン

<xsl:import>要素を利用した外部スタイルシートのインポートで、優先順位の低いテンプレートを完全に打ち消すのではなく、現存するテンプレートの機能に追加するテクニックを紹介します。

カテゴリ XSLT
関連要素 <xsl:apply-template>
関連記事 XSLTテンプレートをインポートする

 別稿「XSLTテンプレートをインポートする」では、<xsl:import>要素を利用した外部スタイルシートのインポートについて解説し、<xsl:import>要素によってインポートされた外部ファイルには優先順位がある、と紹介しました。すなわち、<xsl:import>要素を使用した場合、テンプレートは呼び出される側よりも呼び出す側の方が、前に記述された方よりも後に記述された方が、それぞれ優先順位は高くなります。

 しかし、優先順位の低いテンプレートを完全に打ち消すのではなく、現存するテンプレートの機能に「追加」したいというケースがあるでしょう。そのような場合には、<xsl:apply-template>要素を使用することで、元のテンプレートの機能にほかのテンプレートの機能を入れ子で適用することが可能になります。以下のスタイルシートのロジックそれ自体に関しては、別稿「文章の一部分を強調文字で出力する」を参照してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 別稿「XSLTテンプレートをインポートする」のdescript.xslと比較してください。違いは、descript.xslにおいて、<xsl:template match="description">要素が記述されているかどうかです。<xsl:template match="description">要素が記述されていない場合には、単純にinclude.xslで定義された<xsl:template match="keywd">、<xsl:template match="text()">が適用され、<keywd>要素の内容がボールド体で表示されます。

 しかし、例えば、descript.xslの内部に以下のように<xsl:value-of select="." />と記述された場合にはどうでしょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 この場合、<xsl:import>要素のルールに従い、呼び出し側のスタイルシートが優先され、include.xslの内容は無視されてしまうのです。つまり、<description>要素の内容はただ単にイタリック体で表示されるだけです。

 では、<description>要素の内容をイタリック体で表示し、かつ<keywd>要素の内容をボールド体で表示するにはどのようにしたらよいのでしょう。それが本稿で紹介する<xsl:apply-imports>要素の役割なのです。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 これによって、優先順位のルールからすれば「本来であれば実行されないはず」の、include.xslの内容が適用され、<keywd>要素がボールド体に修飾された<description>要素の内容が、さらにイタリック体に修飾されて表示されるというわけです。

図 &lt;description&gt;要素の中身を斜体で、かつ&lt;keywd&gt;要素の部分を強調表示
図 <description>要素の中身を斜体で、かつ<keywd>要素の部分を強調表示

 <xsl:apply-imports>要素によって、単にテンプレートを置き換えるわけではなく、テンプレートの機能を積み上げ式に追加することが可能になります。より柔軟にスタイルシートを記述する場合に有用なテクニックですので、しっかりとおさえておいてください。

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る