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を利用しなければならない。
次のお勉強