XML+XSL(7)
XSLの書き方(条件判断)
- if , choose -
1 条件判断によって処理を違わせる
今まで特定のノードのデータを抽出するには,Xpathで階層を指定するときに属性を判断させた。
たとえば,<xsl:value-of select="bunsho[@bango='2']/title">などとした。
これをifやchooseを用いて条件判断を行ってデータ抽出やいろいろな処理を行わせることができる。
XMLデータ
<data>
<bunsho bango="1">
<title>XML入門1</title>
<honbun>
<ln>XMLはデータだ</ln>
<ln>XSLはプログラムだ</ln>
</honbun>
</bunsho>
<bunsho bango="2">
<title>XML入門2</title>
<honbun>
<ln>XMLの要素</ln>
<ln>XSLの属性</ln>
</honbun>
</bunsho>
</data>
2 ifによる判断は次のようにする。
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="data/bunsho">
<xsl:if test="@bango='1'">
この条件の時に行う
いろいろな処理
</xsl:if>
</xsl:template>
3 chooseを使うと場合を分けて処理できる。
Cでのswitch, VBでのselect caseのようなもの。
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="data/bunsho">
<xsl:choose>
<xsl:when test="@bango='1'">
この条件の時に行う処理
</xsl:when>
<xsl:when test="@bango='2'">
この条件の時に行う処理
</xsl:when>
<xsl:otherwise>
それ以外の条件の時に行う処理
</xsl:otherwise>
</xsl:choose>
</xsl:template>
4 条件判断は,比較演算子の,=(等号),<>(不等号)や論理演算子を使える。
不等号を書くときは,実体参照で書く。<は,&lt;,>は&gt;と書く。
次の例は,画像を何個か表示する場合に,最初は,3個だけ表示するもの。
続きを表示するkaiho2.xslは,下のxslから,ifを外したもの。
<xsl:template match="/">
<br/>
<a href="#" onclick="hanyo('kiji.xml','kiji.xsl','here2','news')" class="fsize80">ニュース一覧</a>
<br/><br/>
<xsl:apply-templates select="data/kaiho[@idx=$jump]"/>
</xsl:template>
<xsl:template match="*">
<div align="center">
<xsl:for-each select="img">
<xsl:if test="position()<4">
<img src="image/{.}" border="0"/>
<br/><br/>
</xsl:if>
</xsl:for-each>
<a href="#." onclick="hanyo('kaiho.xml','kaiho2.xsl','here2','{$jump}')">続きはクリック</a>
</div>
</xsl:template>