XML+XSL(4)
 
XSLの書き方(その2) -attribute(属性), if test-
 

1 属性を指定して選択抽出する方法
  前回と同じXMLデータを使う。

  属性のbangoを利用して,<bunsho bango="1"></bunsho>部分のデータのみを表示する。
  属性を指定するには@をつけ,bunsho[@bango='1']とする。

 (A)  

  <xsl:template match="/">
     <xsl:apply-templates select="data/bunsho[@bango='1']"/>
  </xsl:template>

  <xsl:template match="data">
     <xsl:value-of select="."/>
  </xsl:template>




  上の方法は,match="data"として,一括してデータを抽出している。
  select="''"と,文字列が入れ子になるときは内部は'文字'と使う。
  
2 実用的には,次のように,title,honbunと分けて選択抽出する方法になる。

 (B)

  <xsl:template match="/">
     <xsl:apply-templates select="data/bunsho[@bango='1']"/>
  </xsl:template>

  <xsl:template match="title">
     <xsl:value-of select="."/><br/>
  </xsl:template>

  <xsl:template match="honbun/ln">
     <xsl:value-of select="."/><br/>
  </xsl:template>
  



  select="data/bunsho[@bango='1']" で,bunshoのbango=1のみのテンプレートを呼び出す。
  テンプレートは,data/bunshoから呼ばれるので,その下の階層のtitleとhonbunでmatchさせる。
  
  上の例で,match="ln"とすると階層が飛んでしまい表示されない。

3 titleとhonbunで分けるとtitleの文字だけを強調したりすることができる。

 (C)

  <xsl:template match="/">
     <xsl:apply-templates select="data/bunsho[@bango='1']"/>
  </xsl:template>

  <xsl:template match="title">
     <H1 style="color:red;">
       <xsl:value-of select="."/><br/>
     </H1>
  </xsl:template>

  <xsl:template match="honbun/ln">
     <xsl:value-of select="."/><br/>
  </xsl:template>
  



  <H1 style="color:red;"> は,赤の大文字というhtml命令(スタイルを使った)だ。
  
3 データを選択する方法としては,ifを使う方法もある。

 (D)

  <xsl:template match="/">
     <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="data/bunsho">
     <xsl:if test="@bango='1'">
       <H1 style="color:red;">
         <xsl:value-of select="title"/><br/>
         <xsl:value-of select="honbun/ln"/><br/>
       </H1>
     </xsl:if>
  </xsl:template>



  test="何とか=かんとか"で,判断条件を設定する。等号だけでなく大小判断もできる。
  
  一応,bango=1のデータが表示されているが,honbun/lnが2行なのに,1行しか表示されていない。
  value-ofが1回しか実行されていないのだ。
  これを改善するには,apply-templatesを利用しなければならない。
  
 
次のお勉強
 
inserted by FC2 system