2個のXSLファイルの結合
このサンプルは、XMLファイルに対し、2個のXSLファイルを結合して摘要するものです。
xsl:include 要素を使って、<xsl:include href="結合させたい別のXSLファイルのURL"/>のように記述しすると、両方のテンプレートルールを変えることなく、まとめて適用させることができます。
URLは相対パスで指定すると良いでしょう。
include.xml設定ファイル transfer.xml は、大きく分けて二つの部分から成り立っています。
帳票番号や記票者・発注者など、一帳票内に必ず一つしかないヘッダ部、そして、品番や単価などの帳票内に一覧表形式で示されている実データ部です。
ヘッダ部はセル一つに一要素が割り当てられているのに対し、一覧表部分は対象列に対して一要素が割り当てられています。
include1.xsl (結合元)@ 1個目のXSLファイル、include.xslの中には、「全体/情報」の中の「氏名」、「ハンドル」、「住所」、「勤務先」のデータを処理するだけで、どのように表示するか具体的には記述していません。
A <xsl:include href="include2.xsl"> のように記述し、include2.xslを結合させています。
結合しない場合との比較をするには<xsl:include href="include2.xsl" />の1行を削除して表示させます。
結合して表示させた結果と異なり、結合するXSLの指定が反映されなくなります。include2.xsl(結合する側)<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="氏名">
<div>氏名:<xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="ハンドル">
<div>ハンドル:<xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="住所">
<div>住所:<xsl:value-of select="."/></div>
</xsl:template>
<xsl:template match="勤務先">
<div>勤務先:<xsl:value-of select="."/></div>
</xsl:template>
</xsl:stylesheet>
1. 1個目のXSLファイル(include.xsl)の中の、<sxl:apply-templates select="氏名">~</xsl:template> で指定したテンプレートを摘要しています。
同様に他の要素ノードに対してもテンプレートを摘要します。
これで、結合するXSLの指定(divタグでのブロックわけ)が反映されるようになります。2個のXSLファイルをまとめて摘要できるということは、逆に言えば、1個のXSLファイルを2個に分けて記述できるということです。最初からいきなり xsl:include要素を使ってXSLコードを書くのではなく、まず基本的なXSLファイルを記述してから、分割して、それぞれ別のXSLファイルとして保存して合体させると理解しやすくなります。
※ xsl:includeはトップレベル要素なので、xsl:stylesheetの子として使いましょう。各位置を間違えるとエラーになります。
※ 結合する側とされる側に同じファイルを指定するとエラーになります。
<<<戻る