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>  


inserted by FC2 system