XML を勉強してみた vol.06
- 投稿日:2010年4月26日 23:05
- カテゴリ:スクリプト関連
こんにちは、GWを前にそわそわしっぱなしのHitoyamです。
XMLのお勉強メモ第6弾。
前回からちょっと間が空きましたが、引き続きXML+XSLTをちまちまと進めたメモをまとめてみました。
実際に自分で書いてみる
実際のファイル
XMLの中身
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="books03-1.xsl" ?>
<books title="お気に入り書籍一覧">
<owner address="hitoyam@gmail.com">Hitoyam</owner>
<book isbn="ISBN4-1020-5701-3">
<name>ナイン・ストーリーズ</name>
<author>J.D.サリンジャー</author>
<image>nine_stories.jpg</image>
<category>英米文学</category>
<url>http://ja.wikipedia.org/wiki/ナイン・ストーリーズ</url>
<price>460</price>
<publish>新潮社</publish>
<pDate>1986-01</pDate>
<memo>1953年に出版された<ref addr="http://ja.wikipedia.org/wiki/サリンジャー">サリンジャー</ref>
の<keyword>自選短篇集</keyword>。「グラース家の物語」の発端となるシーモアが登場する
「A Perfect Day for Bananafish」、WASP中心のアメリカ社会で助けあいながら生きていく
ユダヤ人親子を描いた「Down at the Dinghy」、男女の不倫を描いた「Pretty Mouth and Green my Eyes」など、
9つの作品が収められている。</memo>
</book>
<book isbn="ISBN4-1021-1401-7">
<name>異邦人</name>
<author>アルベール・カミュ</author>
<category>フランス文学</category>
<image>l_etranger.jpg</image>
<url>http://ja.wikipedia.org/wiki/異邦人</url>
<price>420</price>
<publish>新潮社</publish>
<pDate>1954-09</pDate>
<memo>1942年刊。人間社会に存在する不条理について書かれている。
<ref addr="http://ja.wikipedia.org/wiki/カミュ">カミュ</ref>の<keyword>代表作</keyword>の一つとして
数えられる。<ref addr="http://ja.wikipedia.org/wiki/カミュ">カミュ</ref>が46歳の若さで
<ref addr="http://ja.wikipedia.org/wiki/ノーベル文学賞">ノーベル文学賞</ref>を受賞したのは、
この作品によるところが大きいと言われる。</memo>
</book>
<book isbn="ISBN4-1675-0203-8">
<name>レキシントンの幽霊</name>
<author>村上春樹</author>
<image>ghoast_of_lexington.jpg</image>
<category>日本文学</category>
<url>http://ja.wikipedia.org/wiki/レキシントンの幽霊</url>
<price>480</price>
<publish>文藝春秋</publish>
<pDate>1999-10</pDate>
<memo><keyword>短編小説</keyword>、及びそれを表題とした<keyword>短編集</keyword>。
短編集は1996年、文藝春秋より単行本刊行、1999年に文春文庫として文庫化された。
いくつかの作品は収録にあたり加筆されている。</memo>
</book>
<book isbn="ISBN4-1020-9505-5">
<name>夜の樹</name>
<author>トルーマン・カポーティ</author>
<image>a_tree_of_night.jpg</image>
<category>英米文学</category>
<price>580</price>
<publish>新潮社</publish>
<pDate>1994-03</pDate>
<memo>ふとしたことから全てを失ってゆく都市生活者の孤独を捉えた「ミリアム」。
旅行中に奇妙な夫婦と知り合った女子大生の不安を描く「夜の樹」。夢と現実のあわいに漂いながら、
心の核を鮮かに抉り出す、お洒落で哀しい<keyword>ショート・ストーリー</keyword>9編。</memo>
</book>
<book isbn="ISBN4-8288-3293-9">
<name>青い犬の目</name>
<author>ガルシア・マルケス</author>
<category>スペイン文学</category>
<price>560</price>
<publish>福武書店</publish>
<pDate>1994-08</pDate>
<memo>夢の世界に繰り返し現われる女性との奇妙な交流を描いた<keyword>表題作</keyword>「青い犬の目」、
死に対する恐怖のイメージに満ちた、カフカ的悪夢の世界「三度目の諦め」、自らの美貌に苦しめられる
女性の悲しい変身譚「エバは猫の中に」、死者の側から眺めた日常の光景「誰かが薔薇を荒らす」、
『<ref addr="http://ja.wikipedia.org/wiki/百年の孤独">百年の孤独</ref>』の世界へと通じる
マコンド物の1篇「マコンドに降る雨を見たイサベルの独白」他、全11篇を収録。</memo>
</book>
</books>
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>お気に入り書籍一覧:詳細情報表示</title>
<link rel="stylesheet" type="text/css" href="books.css" />
</head>
<body>
<h1>お気に入り書籍一覧:詳細情報表示</h1>
<xsl:apply-templates select="books" />
</body>
</html>
</xsl:template>
<xsl:template match="books">
<table>
<xsl:for-each select="book">
<tr>
<th class="image">
<xsl:if test="image[.!='']">
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="image" />
</xsl:attribute>
<xsl:attribute name="width">105</xsl:attribute>
<xsl:attribute name="height">150</xsl:attribute>
</xsl:element>
</xsl:if>
</th>
<td>
<h2><xsl:number format="01" />. <xsl:value-of select="name" /></h2>
<h3><xsl:value-of select="author" /></h3>
<p><xsl:apply-templates select="memo" /></p>
<p class="price">
<xsl:value-of select="format-number(price,'#,###')" />円</p>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="keyword">
<span class="keyword">
<xsl:value-of select="." />
</span>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
ブラウザ表示のキャプチャ
画像はFirefoxのキャプチャです。今回もブラウザによる表示の差異は特にありませんでした。
今回使った要素と注意点
- <xsl:number> : XSLTで連番を振る
- <xsl:if> : 単純な分岐を実現する
- <format-number> : 桁区切り文字の付加など、数値データを加工する場合に使う関数。xPath関数のひとつ。
- <xsl:attribute>要素は、属性を複数持つ要素の場合には複数個記述してよい
- テンプレートの呼び出し元と呼び出し先は1対1であるとは限らない
えーっと、当たり前のようですが、1,000円を超える本がなかったので、桁が区切られませんでした(笑)。
雑感
もっとバリバリ使いたいと思ったら、やっぱり関数を知ってるかどうかがネックになるのかな。関数を覚えるのはちょっと骨だと思いますが、ただし覚えてしまえば難しいこと考えずに無理なく使えそうな気もするので、とにかく慣れの問題かなー。
ちょっとずつできることも増えてきたし、なんとなく楽しくなってきました。でもこれをいつどこで何に使うかと言われると、よくわかりません。楽しくお勉強できる分には、まぁいいか。難しいことはあとで考えることにします。
- 投稿日:2010年4月26日 23:05
- カテゴリ:スクリプト関連

