since 2004/05

第6回 XSLの便利機能その1

うーん、久しぶりに更新するような気がしないでもないですが・・・

今回はXSLの便利機能について説明します。

まずは、「繰り返し」です。
これは同じタグが続いてる間は、繰り返し同じ動作をさせる機能です。

では早速見てみましょう。
ちなみにXMLデータは前回と同じ日記を使っています。

01:<?xml version="1.0" encoding="Shift_JIS"?> 02:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 03:<xsl:output method="html" encoding="Shift_JIS" /> 04:<xsl:template match="/"> 05: <html> 06: <head> 07: <style type="text/css" media="screen"> 08: @import url(style.css); 09: </style> 10: <title> 11: <xsl:value-of select="diary/title" /> 12: </title> 13: </head> 14: <body> 15: <div class="layout"> 16: <h3 class="since">since 2004/06</h3> 17: <div class="body"> 18: <div class="titleimg"> 19: <div class="titleshadow">What's XML</div> 20: <div class="titlemain">What's XML</div> 21: </div> 22: <h2 class="title">Diary</h2> 23: <p> 24: 気まぐれ日記〜 25: </p> 26: <xsl:for-each select="diary/form"> 27: <table class="diary"> 28: <tr> 29: <td class="diarydate"><xsl:value-of select="date" /></td> 30: <td class="diarysubtitle"><xsl:value-of select="subtitle" /></td> 31: </tr> 32: <tr> 33: <td colspan="2" class="diaryexp"> 34: <pre> 35: <xsl:value-of select="diaryexp" /> 36: </pre> 37: </td> 38: </tr> 39: </table> 40: </xsl:for-each> 41: </div> 42: </div> 43: </body> 44: </html> 45:</xsl:template> 46:</xsl:stylesheet>

26行目にある「for-each」が繰り返しの命令になります。 この26行目から40行目の「for-each」の終りまでを繰り返します。 「for-each」のselect=・・・でタグを指定していますが、これは 「for-each」で囲まれた範囲内は、このタグで括られている、という意味になります。 なので、この中でdateタグを参照するときは、diary/form/dateでなく、 dateだけで、参照できます。 と。 ここまで見て気付く人も要るかもしれませんが。 実はこれ、第4回で説明したものとほぼ同じなんです。 違うのは、「for-each」を使っていて、その中にformテンプレートをそのまま 突っ込んだ、という所のみです。 なのでこれを表示すると、まったく同じ状態で表示されます。 なんだ一緒なら意味無いじゃんダメジャンと思われるかも知れませんが。 実際、この「for-each」を単体で使うことは、あんまりないです。(管理人は。) では。 この「for-each」と組み合わせて使う便利機能とは? それは次回・・・としようかと思ったけど、これだと今回ほとんど意味なくなるので^^; その機能とは「並べ替え(Sort)」です。 これを使えば、指定したタグのデータを基に、並べ替えができます。 さて、どうすれば並べ替えが出来るかと言うと。 上記のXSLに1行足すだけで、出来てしまいます。 まず命令は

<xsl:sort select="date" order="descending" />

です。 この中のselect=・・・で指定しているのは、並べ替えを行う為のキーとなるタグ。 そしてorder=・・・で指定しているのは、降順で並べ替えろーという指定になります。 orderは他に、「ascending(昇順)」があります。 で、これをどこに入れるかというと、26行と27行の間です。 これで、dateでソートされて表示されます。 最新が上に表示されます。 XSL これはkajikaji HPの日記でもそのまま使ってます。 他にもアイデア次第で、使い所は色々ありそう。 色々使って試してみてください。 今回はここまで。 次回もXSLの便利機能の予定です。

kajikaji
kajikaji