XMLってなぁに? 初級編 第4回
この文書は執筆時点(2004/後半)での知識を基にしており、現状とあっていない可能性があります。
第4回
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TITLE</title>
</head>
<body>
ヘッダ
<table border="1"><tbody><tr><td>CDRメディア</td><td>2000</td></tr><tr><td>DVDメディア</td><td>5000</td></tr><tr><td>FDメディア</td><td>1000</td></tr></tbody></table>
フッタ
</body>
</html>
これがさっきのXML+XSLファイルをIEで表示したときのHTMLだ。
このHTMLファイルは別途ツールで結果をファイル保存したものなので、IE上では保存することが出来ない。
また、簡易に説明するためだけにHTMLの文法もまるで無視していることは突っ込み却下でお願いしたい。
では具体的にどのような処理でこのHTMLファイルが出来ているのだろう。
<xsl:template match="/">
<html>
<head>
<title>TITLE</title>
</head>
<body>
ヘッダ
<xsl:apply-templates />
フッタ
</body>
</html>
</xsl:template>
まず最初にあるこれができあがるHTML文書のベースになるものだ。
<xsl:template match="/">
この"/"はルート要素と言って実際に1回だけ動くことが保障されている。
重要なのは
<xsl:apply-templates />
の行で、この行があるとXMLの中をさらにチェックすると言う意味になる。
ここでは
<xsl:apply-templates />
の上下をヘッダとフッタと理解してもらいたいために、そのように記述してある。
それら以外はすべて通常のHTMLタグである。
ただし注意してもらいたいのはXSLファイルも整形XMLである(ウェルフォームドなXML)HTMLの世界では適当に閉じタグを省略しても動作してくれたりするが、XMLでは閉じタグ1個無いだけで読み取りエラーになるそういう世界だ。
<xsl:template match="商品一覧">
<table border="1">
<tbody>
<xsl:apply-templates />
</tbody>
</table>
</xsl:template>
次に出てくるのが商品一覧タグであるので、商品一覧テンプレートが適用される。
ここでは商品一覧はテーブルにすることにしているので、テーブルのヘッダとフッタを記述している。
<商品一覧>
</商品一覧>
ここまでのXMLが解釈された、さらに先ほどのテンプレートに
<xsl:apply-templates />
があるので、さらに下位のツリーを解釈する
<商品一覧>
<商品>
</商品>
<商品>
</商品>
<商品>
</商品>
</商品一覧>
ここで商品と言うタグが出現するので、商品テンプレートの出番だ
<xsl:template match="商品">
<tr><xsl:apply-templates /></tr>
</xsl:template>
ここでは<tr></tr>でくくられている。商品タグがテーブルの1行に値すると言うことだ。
あとは
<xsl:template match="品名">
<td><xsl:apply-templates /></td>
</xsl:template>
<xsl:template match="値段">
<td><xsl:apply-templates /></td>
</xsl:template>
テンプレートでセル単位の設定を行う。
ここで、apply-templatesを行っているのは、残っている文字列を単純に表示させる為である。
次は属性版を作ってみよう。