- PR -

xslスタイルシートにて・・・

1
投稿者投稿内容
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2005-03-25 14:12
繰り返しのある以下のノードに関してNULLの前で”,”を表示させないようにすればどうすればいいでしょうか?
<内訳>
 <内金額>100000</内金額>
 <起算日>
  <年号>平成</年号>
  <年月日>01/02/03</年月日>
 </起算日>
</内訳>
<内訳>
 <内金額>200000</内金額>
 <起算日>
  <年号>平成</年号>
  <年月日>01/02/04</年月日>
 </起算日>
</内訳>
<内訳>
 <内金額/>
 <起算日>
  <年号/>
  <年月日/>
 </起算日>
</内訳>
このようなXMLから
<xsl:block>
詳細は<xsl:for-each select="内訳">
<xsl:if test="内金額!=''">内金
<xsl:value-of select="format-number(内金額, '#,##0')"/>円を
<xsl:if test="position()">,</xsl:if>
</xsl:if>
</xsl:for-each>
となります</xsl:block>
以上のXSLにて、
「詳細は内金10,000円を平成01/02/03,内金20,000円を平成01/02/04,となります」
と表示しますが、文章の体裁上、2個目のカンマ”, ”はいらないのです。
XMLのデータは可変で<内訳>も実際は12個あります。
<xsl:if test="position()">,</xsl:if>←の部分の条件を変えるか
for-eachの前にcount等で内金額!=''の前までの数を出す等を
考えたのですが、うまくいきません。
いい方法をご教示願います。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-03-25 15:42
<xsl:for-each select="内訳[内金額!='']"> ● last()を使えるように選択する
内金
<xsl:value-of select="format-number(内金額, '#,##0')"/>円を
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:for-each>

[ メッセージ編集済み 編集者: MMX 編集日時 2005-03-25 15:44 ]
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2005-03-25 16:48
MMXさん、ありがとうございました!
<xsl:if test="not(position()=last())">,</xsl:if>
の構造は頭の中にあったのですが、
内金額がNULLの内訳があるのでlast()は使えないなぁ・・・と
思い込んでしまっていました。

<xsl:for-each select="内訳[内金額!='']">
の書き方は非常に勉強になりました。
本当にありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)