- PR -

要素の入っている最後のノードだけ別の処理をする

1
投稿者投稿内容
fireworkss
会議室デビュー日: 2007/02/12
投稿数: 11
投稿日時: 2007-02-22 20:47
いつもお世話になっております。
ご協力お願いします。

下記のようなxmlデータがあったとして、

xml
---------------------------------------------------
<a>a-01-01</a>
<a>a-01-02</a>
<a></a>
<a></a>
<a></a>
---------------------------------------------------

最後のノードだけ別のテンプレートを使用したいのですが、
何も反応してくれません。

ためしにlast()でポジションを出力してみたら、
1番目と2番目のノードに対しfalseが返されました。
2番目にtrueが返されることを期待してたのですが・・・

つまり、データのはいっていない五番目のノードが、
lastになっているようです。(あたりまえですが・・・)

どうにかデータの入っている2番目のノードをlastとして、
認識させたいのですが、無理なのでしょうか?
※データの終わりが何番目かは特定できません。


「データの入っている最後のノードに最後用のテンプレートを適用」
といった具合にさせたいと思います。

ご協力お願いいたします。



[ メッセージ編集済み 編集者: fireworkss 編集日時 2007-02-22 20:54 ]
ひだちのいろ
会議室デビュー日: 2007/02/14
投稿数: 9
投稿日時: 2007-02-22 21:23
fireworkssさん、はじめまして。
こんな感じでどうでしょうか。

==========================
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- 出力モード -->
<xsl:output method="html" encoding="Shift_JIS"/>

<!-- 一般のaタグ -->
<xsl:template match="a">
<xsl:apply-templates/><br/>
</xsl:template>

<!-- 中身のある最後のaタグ -->
<xsl:template match="a[string(.)!=''][position()=last()]">
<span style="color:#ff0000">
<xsl:apply-templates/>
</span><br/>
</xsl:template>

</xsl:stylesheet>
==========================

match="a[string(.)!=''][position()=last()]"

が、『要素の入っている最後のaタグ』を表します。

a[string(.)!='']

の部分で『aタグの中に要素があるもの』に絞込み、続く

[position()=last()]

でその中の最後のタグを表します。

fireworkss
会議室デビュー日: 2007/02/12
投稿数: 11
投稿日時: 2007-02-23 16:28
ご返信ありがとうございます!

なるほど、、[string(.)!='']ですべて解決できました!

ありがとうございました!!
1

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