@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

xsl:number でのカウントのスキップ

1
投稿者投稿内容
Spoon
会議室デビュー日: 2009/02/09
投稿数: 2
投稿日時: 2009-02-09 10:53
いつも拝見させていただいております。

最近 XML/XSLT を勉強し始めました。
項番を付加するために xsl:number が利用できると思いますが、ある条件のときカウントをスキップするようなことは実現できないでしょうか?

やりたいことは以下の通りです。

---
[XML]
<root>
<child>出力したくない</child>
<child>出力したい</child>
</root>
---

のとき、xsl:if で次のように 出力する/しないを選択したとします。

---
[XSL]
<xsl:template match="root/child">
<xsl:if test="contains(text(), '出力したい')">
<xsl:number />
</xsl:if>
</xsl:template>
---

このとき、出力されるデータは1個ですが、項番としては「2」となります。
child をカウントしているので当然なのですが、どうにかして条件に当てはまるものだけ、項番を振ることはできないでしょうか?

かなり考えた挙句、現在は、出力後にスクリプトで項番を振るという残念な方法になっています…。

よろしくお願いいたします。


[ メッセージ編集済み 編集者: Spoon 編集日時 2009-02-09 17:04 ]
aiaru
会議室デビュー日: 2009/02/10
投稿数: 7
投稿日時: 2009-02-10 18:22
カウント対象を指定するのはいかがでしょうか。

<xsl:template match="root/child">
<xsl:if test="contains(text(), '出力したい')">
<xsl:number level="single" count="root/child[text()='出力したい']" format="1"/>
</xsl:if>
</xsl:template>
Spoon
会議室デビュー日: 2009/02/09
投稿数: 2
投稿日時: 2009-02-12 11:33
実現できました。ありがとうございます。

投稿前に、count 属性に条件を設定する方法もいろいろ試してみたつもりだったのですが、うまくいっていませんでした。
ご提示いただいた内容を見比べて再度考えたところ、必要な出力を得ることができました。
ありがとうございました。
1

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