XML を勉強してみた vol.03
- 投稿日:2010年4月 7日 23:49
- カテゴリ:スクリプト関連
こんにちは、夜ごはんはアジの開き定食だったHitoyamです。満足満足。
そんなこんなで、XMLのお勉強メモ第3弾。今回はXML+XSLTをやってみました。
XSLT (eXtensible Stylesheet Language Transformations)
XMLによって記述された文書を他のXML文書に変換するための簡易言語。XML文書の構造を別の形式に変形するための変換ルールを記述するもの。
主としてXML文書からHTML文書などへの変換に使用されるもので、いわゆるスタイルシート。HTMLとCSSの関係と同じように、見た目のデザインと構造を分離するための仕組みです。HTMLのみを扱っている制作者は、スタイルシート=CSSって感覚だと思うのですが、ドキュメント文書において表示形式を制御する概念のものは全てスタイルシートなんですね。
実際に自分で書いてみる
実際のファイル
XSLTスタイルシートの中身
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="UTF-8" />
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="books/@title" /></title>
<link rel="stylesheet" type="text/css" href="books.css" />
</head>
<body>
<h1><xsl:value-of select="books/@title" /></h1>
<table>
<tr>
<th><xsl:text>ISBN</xsl:text></th>
<th><xsl:text>書籍</xsl:text></th>
<th><xsl:text>著者</xsl:text></th>
<th><xsl:text>出版社</xsl:text></th>
<th><xsl:text>価格</xsl:text></th>
<th><xsl:text>発刊日</xsl:text></th>
</tr>
<xsl:apply-templates select="books" />
</table>
<p><xsl:value-of select="books/owner" /></p>
</body>
</html>
</xsl:template>
<xsl:template match="books">
<xsl:for-each select="book">
<xsl:sort select="publish" data-type="text" order="ascending" />
<xsl:sort select="pDate" data-type="text" order="descending" />
<tr>
<td><xsl:value-of select="@isbn" /></td>
<td><xsl:value-of select="name" /></td>
<td><xsl:value-of select="author" /></td>
<td><xsl:value-of select="publish" /></td>
<td><xsl:value-of select="price" /></td>
<td><xsl:value-of select="pDate" /></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
ブラウザ表示のキャプチャ
画像はFirefoxのキャプチャですが、とりあえずはどのブラウザで見ても同じように表示されていました。
今回使った要素と注意点
- <xsl:apply-template> : テンプレート内に他のテンプレートを呼び出す
- <xsl:for-each> : 繰り返し項目を出力する
- <xsl:sort> : 出力順を制御⇒data-type属性を指定することで様々なデータのソート処理を行うことができる
- <xsl:element>、<xsl:attribute> : HTMLのタグを吐き出すことができる
- <xsl:choose> : 多岐の条件分岐を行う
- XSLTスタイルシート内には複数のテンプレートを含めることができるが、テンプレートの入れ子は不可
- <xsl:template>や<xsl:for-each>などの配下ではカレントノードが移動する
カレントノードが移動するというのがどういうことかというと、現在位置を示す基点が移動するということ。カレントノードは現在テンプレートが処理を行っている対象の要素に移るってことらしいんですが、言葉で説明するとなんかよく分かりません...。感覚としては分かっているので、まぁいいか。
雑感
まだ基本の基本なので、文字の決まりごとだけ気を付ければ、特に難しいことも何もない感じ。XHTMLがある程度書ける人であれば、文書を書くこと自体に大きなハードルはなさそうに思いました。
- 投稿日:2010年4月 7日 23:49
- カテゴリ:スクリプト関連

