xsl:ifで複数の条件を指定したい場合

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

xsl:ifで複数の条件を指定したい場合

投稿記事 by ifeel » 2006年12月04日(月) 16:11

こんにちは。

リファレンスマニュアルの「データ値の内容によって処理を変える」を
参考にして、画像がない場合は○○を表示、などの処理を行えるようになったのですが、
「画像1と画像2と画像3がない場合」のように複数の条件を指定したい場合はどのようにすればよいでしょうか?

具体的には
<p>
<xsl:if test="img1/text()"><img src="{img1}" /></xsl:if>
<xsl:if test="img2/text()"><img src="{img2}" /></xsl:if>
<xsl:if test="img3/text()"><img src="{img3}" /></xsl:if>
</p>
となっている時に、画像1〜3全てがない場合、空の<p>タグだけが
残ってしまうため、3つとも画像がない場合は<p>タグごと非表示にしたいのです。

適当に<xsl:if test="img01&img02/text()">など試してみましたが
当然動かず :oops: またこちらでアドバイスをいただければと書き込みさせていただきました。お手数ですがよろしくお願いいたします。

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2006年12月05日(火) 09:50

ifeelさん

うまく動くか分かりませんが、、、、、。
img1/img2/img3のいずれかが存在していれば〜という条件になってると思います。多分。

コード: 全て選択

<xsl:if test="img1/text() or img2/text() or img3/text()">
<p>
<xsl:if test="img1/text()"><img src="{img1}" /></xsl:if>
<xsl:if test="img2/text()"><img src="{img2}" /></xsl:if>
<xsl:if test="img3/text()"><img src="{img3}" /></xsl:if>
</p>
</xsl:if>
画像一つ一つをPタグでくくるのであれば、

コード: 全て選択

<xsl:if test="img1/text()"><p><img src="{img1}" /></p></xsl:if>
<xsl:if test="img2/text()"><p><img src="{img2}" /></p></xsl:if>
<xsl:if test="img3/text()"><p><img src="{img3}" /></p></xsl:if>

ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

なるほど!

投稿記事 by ifeel » 2006年12月05日(火) 10:34

tsuさんへ

アドバイスありがとうございます!

無事思った通りの結果になりました。
そうゆう記述の仕方なのですね。

しかも考え方として and ではなく
「どれかが存在していれば」なので or だったのですね。

試しに、or をandに変えたてみたら
画像が3つないとPタグごと消えてしまいました・・・。

これを知っていると、他にも色々と応用できそうです。
とても良い勉強になりました、ありがとうございました! :D

tsu
パワーユーザー
記事: 208
登録日時: 2006年1月16日(月) 12:00
お住まい: さいたま

投稿記事 by tsu » 2006年12月05日(火) 11:08

ifeelさん

無事に動いて良かったです :)
他にも色々XPathについて書かれている記事がありますので参考にどうぞ。
http://www.utj.co.jp/XML/dev/xslt/xslt3_1.html

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

投稿記事 by webmaster » 2006年12月11日(月) 01:07

 webmasterです。ifeelさん、ご質問ありがとうございました。
 また、tsuさん、ご回答大変助かります。

 andやorについてはXSLTの高度な使い方だと位置づけ、マニュアルでは解説して
おりませんでしたが、そのせいでご面倒をおかけしたようで申し訳ありませんでした。

 仰る通り、andとorを使いこなせる方にとってはかなり便利な手段となるかと思いますので、
ぜひご活用頂ければ幸いです。

 また、andとorは()で入れ子にすることもできます。

 例: <xsl:if test="(条件1 or 条件2) and (条件3 or 条件4)">

ifeel
パワーユーザー
記事: 32
登録日時: 2006年9月28日(木) 19:40

ありがとうございます

投稿記事 by ifeel » 2006年12月11日(月) 12:51

tsuさん

こちらでもお世話になりました。

こちらで丁寧にアドバイスしていただけた事もあり
xmlにはまってきました :lol:
もっと勉強して色んな事を試してみたいなぁと思っていたので
教えていただいたページ、参考にさせていただきます!

webmaster様

さらなる高度な使い方をありがとうございます!
cmsdesigner自体、知識が少ない人でも使える
素晴らしいツールですが、間口が広い分
更に奥深いxmlの世界への興味も沸かせてくれますね。

また何かありましたらよろしくお願いいたします。

返信