XMLってなぁに? 初級編 第5回
この文書は執筆時点(2004/後半)での知識を基にしており、現状とあっていない可能性があります。
第5回
a.xmlファイル
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="a.xsl"?>
<商品一覧>
<商品 品名="CDRメディア" 値段="2000" />
<商品 品名="DVDメディア" 値段="5000" />
<商品 品名="FDメディア" 値段="1000" />
</商品一覧>
a.xsltファイル
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:template match="/">
<html>
<head>
<title>TITLE</title>
</head>
<body>
ヘッダ
<xsl:apply-templates />
フッタ
</body>
</html>
</xsl:template>
<xsl:template match="商品一覧">
<table border="1">
<tbody>
<xsl:apply-templates />
</tbody>
</table>
</xsl:template>
<xsl:template match="商品">
<tr><td><xsl:value-of select="@品名" /></td><td><xsl:value-of select="@値段" /></td></tr>
</xsl:template>
</xsl:stylesheet>
これが最終的な出来上がりのファイルである。
XMLの方は前回までに説明しているので割愛するとして、XSLの方を見てみよう。
XSLで何が変わっているかと言うと、商品用のテンプレートが変更になっていて、品名、値段のテンプレートがなくなっている。
品名と値段は要素ではなく、商品の属性になったためテンプレートを適用する対象としてはふさわしくなくなったと思ってもらいたい。
そうすると、商品の中で表示をさせてやら無いといけないわけだが、それが
<tr><td><xsl:value-of select="@品名" /></td><td><xsl:value-of select="@値段" /></td></tr>
の1行だ。
<xsl:value-of select="@品名" />
を見るとわかるように、value-ofと言う命令でそこに値を表示することが出来る。
@が前についている場合それは属性を意味していることになるので、@品名とは商品要素の品名属性と言うことがわかると思う。
また商品より下位の要素を持ち合わせていないのでapply-templatesも行っていない。
このようにXMLとXSLを組み合わせることでデータと表示形式を分離することが可能だ。
さらにCSS(Cascading Style Sheets)を組み合わせて、データ、表示形式、レイアウトを3分割するとなんだかスタイリッシュな感じがする。
ただこの方法も奥が深く実は泥沼が待っているとかいないとか。
次回はXML->Text変換をやってみよう。