http://www.sw.it.aoyama.ac.jp/2006/PB2/lecture11.html
O 棟 529号室
© 2006 Martin J. Dürst 青山学院大学
<xsl:for-each>
<xsl:attribute>
など<xls:if>
<xls:choose>
変換ファイル ordersDiscount.xsl
の割引の計算を <xsl:if>
から
<xsl:choose>
に変更する。
正解の一例: ordersDiscountChoose.xsl
本ごとの郵送料を計算する。注文のリストにそのための新しい欄を作る。本の全体の値段に足す。
正解の一例: ordersShipping.xsl
<xsl:apply-templates>
で複数のものの処理が可能<xsl:apply-templates select='book'/>
<xsl:sort>
で指定<xls:for-each>
<xsl:for-each
select='条件'>結果</xsl:for-each>
<xsl:apply-templates>
に
<xsl:template>
をいれたもの<xsl:sort>
で順番が変更可能<xsl:for-each>
と現在のノード<xsl:for-each>
の内部には現在のノードは繰り返しの対称ノード<xsl:for-each select='book'> <xsl:apply-templates select='@isbn'/> ... </xsl:for-each>
<xsl:for-each select='book'>
<xsl:apply-templates select='book/@isbn'/>
...
</xsl:for-each>
<xsl:for-each>
と position()
など<xsl:for-each>
の内部で position()
は「全体の何番目」を指すlast()
は全体の数を指す<xsl:for-each select='book'> <xsl:choose> <xsl:when test='(position() mod 2) = 0'> <tr><xsl:apply-templates select='.'/></tr> </xsl:when> <xsl:when test='(position() mod 2) = 1'> <tr style='background-color: lightgreen'> <xsl:apply-templates select='.'/></tr> </xsl:when> </xsl:choose> </xsl:for-each>
<xsl:apply-templates>
で「誰かやってくれ」と要素を次々押し出す<xsl:for-each>
や
<xsl:value-of>
で必要な処理や内容を明示的に指定
(引っ張り込み)<xsl:attribute>
@name
で、属性値は
<xsl:attribute>
の内容で指定<xsl:attribute name='style'>background-color:
lightgreen</xsl:attribute>
<xsl:element>
,
<xsl:text>
, <xsl:comment>
などがある提出: 12月30日 (日曜日) 22:00 までに Moodle に投稿
本をテーブルとして出力する変換ファイルを次のように変更する:
<xsl:attribute>
を使用する提出: 12月30日 (日曜日) 22:00 までに Moodle に投稿
今まで使った簡単な変換ファイルをベースに、<xsl:apply-templates>
を少しずつ <xsl:for-each>
(や
<xsl:value-of>
) に変換。
注意: この演習はあくまで
<xsl:apply-templates>
と
<xsl:for-each>
の関係や複数の
<xsl:for-each>
の限界を実感するためのもので、このような「団子変換」を絶対使って欲しくない。