XML を勉強してみた vol.04
- 投稿日:2010年4月 8日 22:54
- カテゴリ:スクリプト関連
こんにちは、今日の夕飯はバジルオイルに漬けた豚肉のソテーだったHitoyamです。
付け合わせのマッシュルームと一緒に美味しくいただきました。残飯整理のトマトスープも、まぁそこそこかな。
で、XMLのお勉強メモは地味に続いて第4弾。今回はXML+XSLTの続きですが、xPath関数というのが出てきます。関数とか言われると、途端に難しそうな気がしてしまうのですが、とにかくやってみる、と。
実際に自分で書いてみる
実際のファイル
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" />
<tr>
<td colspan="3"></td>
<th class="count">平均</th>
<td colspan="2"><xsl:value-of select="sum(books//price) div count(books//price)" />円</td>
</tr>
<tr>
<td colspan="3"></td>
<th class="count">合計</th>
<td colspan="2"><xsl:value-of select="sum(books//price)" />円</td>
</tr>
</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="price" data-type="number" order="ascending" />
<xsl:sort select="pDate" data-type="text" order="descending" />
<tr>
<td><xsl:value-of select="substring(@isbn,5,20)" /></td>
<td>
<xsl:choose>
<xsl:when test="url">
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="url" />
</xsl:attribute>
<xsl:value-of select="name" />
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name" />
</xsl:otherwise>
</xsl:choose>
</td>
<td><xsl:value-of select="author" /></td>
<td>
<xsl:if test="publish[.='']">
<xsl:message terminate="yes" />
</xsl:if>
<xsl:value-of select="publish" />
</td>
<td>
<xsl:choose>
<xsl:when test="price[number(.) <= 500]">
<span style="color:#ff0000;font-weight:bold;"><
xsl:value-of select="format-number(price,'#,###')" />円</span>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number(price,'#,###')" />円
</xsl:otherwise>
</xsl:choose>
</td>
<td><xsl:value-of select="pDate" /></td>
</tr>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
ブラウザ表示のキャプチャ
画像はFirefoxのキャプチャですが、今回もブラウザ間の差異はほとんどなかったです。
books02-1.xslとの違い
- 価格順に並べ替えてみた
- 本のタイトル(name)からWikipediaへのリンク(url)を張ってみた
- 500円以下の商品を赤い太字で装飾してみた
雑感
基本は前回と一緒だけれど、ちょこちょこと装飾が反映されるとちょっとできてきたような気分に(気分だけだけど)なるので、やってて楽しくなってきた気がします。関数がもっとたくさん出てくるようになると、難しくなっちゃうのかなぁ。なるべく苦手意識は封印して進むことにします。
- 投稿日:2010年4月 8日 22:54
- カテゴリ:スクリプト関連

