その仕事、蠍は留守です

おべんきょうしたことなどをメモメモしておくブログです。

さそるのホーム
さそるのおしごと
スクリプト関連
XML を勉強してみた vol.04

XML を勉強してみた vol.04

こんにちは、今日の夕飯はバジルオイルに漬けた豚肉のソテーだった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での表示

画像はFirefoxのキャプチャですが、今回もブラウザ間の差異はほとんどなかったです。

books02-1.xslとの違い

  • 価格順に並べ替えてみた
  • 本のタイトル(name)からWikipediaへのリンク(url)を張ってみた
  • 500円以下の商品を赤い太字で装飾してみた

雑感

基本は前回と一緒だけれど、ちょこちょこと装飾が反映されるとちょっとできてきたような気分に(気分だけだけど)なるので、やってて楽しくなってきた気がします。関数がもっとたくさん出てくるようになると、難しくなっちゃうのかなぁ。なるべく苦手意識は封印して進むことにします。

My Contact Lists

このサイト『蠍は留守です』はIE6、IE7を対応を廃止しました。
申し訳ありませんが、新しいバージョンのブラウザでご覧下さい。