|
<xsl:key> 1つのXML文書に複数のKeyを設定<xsl:key name="qname" match="pattern" use="expression" />xsl:keyは、名前(キー名)を指定し、要素への参照を宣言します。 トップレベル要素の位置に記述し、key関数で、xsl:keyによって宣言された キーの名前・値を持つノードを得ることができます。
前回はxsl:keyを使用して、key関数及び、key関数と似たような働きをするid関数について解説しました。
今回はxsl:keyとkey関数を用い、id関数では実現する事のできない「1つの要素に複数のKeyを設定」
する場合の方法について解説します。
■ aaa.xml
<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="bbb.xsl"?>
<item>
<book number="b001">
<name>誰でも簡単XML</name>
<val>1800</val>
<stock>18</stock>
<cate>XML</cate>
</book>
<book number="b002">
<name>XSLTを使いこなす</name>
<val>3200</val>
<stock>27</stock>
<cate>XSLT</cate>
</book>
<book number="b004">
<name>すぐ使えるテンプレート集</name>
<val>1800</val>
<stock>40</stock>
<cate>XSLT</cate>
</book>
<book number="b005">
<name>XML効率化宣言</name>
<val>2100</val>
<stock>27</stock>
<cate>XML</cate>
</book>
</item>
■ bbb.xsl <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="catexml" match="book" use="cate" /> <xsl:key name="catexslt" match="book" use="cate" /> <xsl:template match="/"> <html> <head> <link rel="stylesheet" href="ccc.css" /> </head> <body> <h1>書籍分類別</h1> <h2>分類:XML</h2> <table cellspacing="0"> <tr> <th width="180">商品名</th> <th width="100">分類</th> <th>価格</th> <th width="140">在庫数</th> </tr> <xsl:apply-templates select="key('catexml','XML')" mode="cate01" /> </table> <h2>分類:XSLT</h2> <table cellspacing="0"> <tr> <th width="180">商品名</th> <th width="100">分類</th> <th>価格</th> <th width="140">在庫数</th> </tr> <xsl:apply-templates select="key('catexslt','XSLT')" mode="cate02" /> </table> </body> </html> </xsl:template> <xsl:template match="book" mode="cate01"> <tr> <td> <xsl:value-of select="name" /> </td> <td> <xsl:value-of select="cate" /> </td> <td class="aka"> <xsl:value-of select="val" />円 </td> <td> <xsl:apply-templates select="stock" />冊 </td> </tr> </xsl:template> <xsl:template match="book" mode="cate02"> <tr> <td> <xsl:value-of select="name" /> </td> <td> <xsl:value-of select="cate" /> </td> <td class="aka"> <xsl:value-of select="val" />円 </td> <td> <xsl:apply-templates select="stock" />冊 </td> </tr> </xsl:template> </xsl:stylesheet>
■ ccc.css
h1 {font-size:18px;color:#336633}
h2 {font-size:14px;color:#668866}
table {width:500px}
th {background-color:#99ff66;padding:3px}
td {padding:5px;line-height:150%;border-color:#333333;
border-width:1px;border-style:solid}
.aka {color:#990000}
上記のbbb.xslスタイルシートでは
<xsl:key name="catexml" match="book" use="cate" />
<xsl:key name="catexslt" match="book" use="cate" />
のように複数のkeyを設定しています。ここではid関数では実現する事のできない子要素をID型として
扱っており、「name属性」ではキー名を、「match属性」ではキーを定義するノード・・
つまりbook要素、「use属性」ではmatchに割り当てられるキー値・・つまりここでは子要素である
cateを指定しています。
mode="cate01"
mode="cate02"
それぞれのkeyで、match属性が同じ「book」ノードの集合を返します。
その為、上記のような「mode属性」により、処理を行うテンプレートがどれなのかを指定
しています。
|
XSLT要素一覧
+ <xsl:apply-imports>
+ <xsl:apply-templates> + <xsl:attribute> + <xsl:attribute-set> + <xsl:call-template> + <xsl:comment> + <xsl:copy> + <xsl:copy-of> + <xsl:decimal-format> + <xsl:element> + <xsl:fallback> + <xsl:for-each> + <xsl:if> + <xsl:import> + <xsl:include> + <xsl:key> + <xsl:message> + <xsl:namespace-alias> + <xsl:number> + <xsl:otherwise> + <xsl:output> + <xsl:param> + <xsl:preserve-space> + <xsl:processing-instruction> + <xsl:sort> + <xsl:strip-space> + <xsl:stylesheet> + <xsl:template> + <xsl:text> + <xsl:value-of> + <xsl:variable> + <xsl:when> + <xsl:with-param> |
Copyright © 2006 - ykr414 . All Rights Reserved. |