http://www.sw.it.aoyama.ac.jp/2006/PB2/lecture10.html
O 棟 529号室
© 2006 Martin J. Dürst 青山学院大学
document()
関数で「予備」のデータファイルが使える<xsl:variable>
で変数が作れる提出: 12月10日 (日曜日) 22:00 までに Moodle に投稿
order.xml の注文を HTML で分かりやすいように変更する。注文票に本の題名、著者、値段などをbooks.xml から引用し、本ごとの小計 (冊の数 * 単価) を計算し、表で出力する。
注意: books.xml を変更しましたので、更新してください。
条件: 同じ処理を繰り返さないように、そして XSLT が読みやすいように、変数を一つだけではなく三つぐらい使ってください。
ヒント: 途中までの変換ファイル: myorders.xsl
正解の例: orders.xsl
質問: 出力に <td><td>3</td></td>
などができる。なぜですか。
答え: テンプレートを適用するうちに複数回
<td>
...</td>
に「遭遇」した。
例:
<td><xsl:apply-templates select='@number'/></td> ... <xsl:template match='@number'> <td><xsl:value-of select='.'/></td> </xsl:template>
解決策: どちらかの <td>
と
</td>
をとる
参考: <td><xsl:value-of
select='@number'/></td>
でも書けます。
mode
を使えば、自然に分類が可能<xsl:apply-templates select='book[position()!=last()'/> <xsl:apply-templates select='book[last()] mode='last-book'/>
<xls:if>
<xsl:if
test='条件'>結果</xsl:if>
<xsl:if test='@number >
100'>20</xsl:if>
<xls:choose>
<xls:choose>
の中に一つ以上の
<xsl:when test='条件'>
の後必要に応じて
<xsl:otherwise>
<xsl:when>
の中身が結果<xsl:when>
の結果も合わなかったら <xsl:otherwise>
の中身が結果; それもなかったら結果はな<xsl:choose> <xsl:when test='@number > 100'>20</xsl:when> <xsl:otherwise>0</otherwise><!-- 割引なし --> </xsl:choose>
(提出不要)
変換ファイル ordersDiscount.xsl
の割引の計算を <xsl:if>
から
<xsl:choose>
に変更する。
注意点:
order.xml
を部数が多くなるように変換又は再ダウンロード<xsl:if>
の変わりに一つの
<xsl:choose>
を使う提出: 12月17日 (日曜日) 22:00 までに Moodle に投稿
本ごとの郵送料を計算する。注文のリストにそのための新しい欄を作る。本の全体の値段に足す。
本の数 | ||||
---|---|---|---|---|
> 50 | > 2 | ≤ 2 | ||
値段 (円) | > 10,000 | 0 | 500 | 500 |
> 2000 | 100 | 300 | 500 | |
> 500 | 100 | 200 | 300 | |
≤500 | 75 | 150 | 200 |
ヒント: