- PR -

for-eachのselect要素で指定したタグがNULLなら表示しなくない

1
投稿者投稿内容
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2005-02-28 10:35
こんにちは。XMLの仕様が中途半端だったので、嫌な現象が起こってしまいました。
XML中で繰り返されるデータをfor-eachで表形式で表示していたのですが、
データにNULLが存在したのです。下記のような感じです。
<test>
<object>お茶</object>
<no>1</no>
</test>
<test>
<object>コーヒー</object>
<no>2</no>
</test>
<test>
<object></object>
<no></no>
</test>

現在のXSLだと、下記のようになってしまいます(汗)。
お茶は番号1です。
コーヒーは番号2です。
は番号です。

これをNULLの場合は表示させなくする方法を教えていただけないでしょうか?初歩的な質問で申し訳ありません。よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-02-28 12:18
xsl:ifでobjectに値が入っている場合だけ出力するようにすればよいのではないですか?

Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2005-02-28 13:14
ご回答ありがとうございます。
確かにxsl:ifでご指摘どおりの処理を事前に試しましたが
<xsl:for-each select="test">
<xsl:if test="test/object!=''>
処理
</xsl:if>
</xsl:for-each>

だと、うまくいきません。おそらく
<xsl:if test="test/object!=''>
は<xsl:if test="test/object[1]!=''>
と同様の意味のため(ですよね?)1行目のデータが
挿入されていれば残りの行にデータが無くても
表示されてしまうということには気がつきました。
<for-each>内の<xsl:if>も同じく繰り返してくれればいいのですが
だめみたいです。
もう少しいいアルゴリズムがあればご教示願います。
よろしくお願いします
Vacant-Eyes
ベテラン
会議室デビュー日: 2004/08/15
投稿数: 97
投稿日時: 2005-02-28 16:16
引用:

Anglerさんの書き込み (2005-02-28 13:14) より:
確かにxsl:ifでご指摘どおりの処理を事前に試しましたが
<xsl:for-each select="test">
<xsl:if test="test/object!=''>
処理
</xsl:if>
</xsl:for-each>
だと、うまくいきません。おそらく



私の環境では
<xsl:if test="object!=''">
                 ↑見にくい〜。
                 シングルクォーテーション2つとダブルクォーテーションです。
でうまくいきました。
XSLTプロセッサは何をお使いですか?
ちなみにXMLにルート要素がないのは投稿の便宜上ですよね?
Angler
ベテラン
会議室デビュー日: 2004/12/21
投稿数: 56
投稿日時: 2005-02-28 16:48
ご回答ありがとうございました。

>XMLにルート要素がないのは投稿の便宜上ですよね?
その通りです〜。 申し訳ないです^^;

で、Vacant-Eyesさんとは同様の処理を入れたはず!と思ってて
でも再度試してみたらうまく行きました!

どうやら中身のobject部分がおかしかったみたいです--;
ありがとうございました!助かりました!
1

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