ページ 11

xsl:ifが効かない

Posted: 2005年11月10日(木) 19:15
by シンP
先日書き込みさせていただいた、部活動のページを作っているものです。

数日前から使わせていただいています。
高機能なのですが、設定等とてもシンプルで使いやすいです。

質問は「xsl:if」についてです。

下のようにxsl:ifをしようして、データ項目「job」が存在する場合のみ
xmlソースをはき出したいと思っているのですが、なぜか「xsl:if」が効かず
ソースが常に表示されてしまいます。

コード: 全て選択

<xsl:if test="job/text()">
<div class="jobbox"><div class="job">役職:<xsl:value-of select="job" disable-output-escaping="yes" /></div></div>
</xsl:if>
windowsにapacheなど入れて、local環境で試している段階なので
それが原因かもしれませんが、考えられる原因等ありましたご教授ください。

Re: xsl:ifが効かない

Posted: 2005年11月10日(木) 23:25
by webmaster
 webmasterです。シンPさん、CMSDをご利用頂きありがとうございます。

 ご報告頂いた内容ですが、文法的にはそれで合っていると思います。
 しかし、なぜ動かないのか…?

 一度、コンテンツ管理画面より該当のエントリを保存しなおしてみて下さい。
 それでもダメならば、条件式を

コード: 全て選択

job/text()
 から、

コード: 全て選択

not(job/text())
 に変更してみてください。not()で囲うと、条件式が正反対の意味になる為、
基本的にはそれまで表示されていたものが表示されなくなり、表示されていなかった
ものが表示されるようになるはずです。

 それでも結果に変わりがない場合、XSLTライブラリが正しく動作していない
可能性があります。
 一度、includeフォルダのxmlconfig.php.incをEUC-JP対応のエディタで開き、
$gXsltLib = 0; 「以外」に設定してみてください。

 それでも変化が無い場合、一度ここへXSLT全文を貼り付けて頂けない
でしょうか?
 こちらでチェックさせて頂きます。m(_ _)m

出来ました

Posted: 2005年11月11日(金) 22:58
by シンP
素早い対応ありがとうございます。

xreaサーバーにアップしたら、普通に動きました。
やはり、ローカル環境に問題があったようです。
他の部分は問題なく動くのですが…、なにが足りないのでしょうか?

xsl:ifつながりで、もう一つ質問をさせてください。

以下のようにmenu項目「sex」の値で、出力するTDタグを変えて
TDタグのbackground-color部分を変化させたいと思っています。

仕様だと思うのですが、以下のような記述だと
表示の時に、tdの開始・終了タグがマッチしていないという旨のエラーが出てしまいます。

他になにか、スタイル内の値を条件付きで指定する方法は無いでしょうか?
<xsl:if test="sex='M'">
<td style="width: 25%;border: solid 1px #bbbbbb;background-color: #ddddff;vertical-align: center;text-align: right;">
</xsl:if>
<xsl:if test="sex='F'">
<td style="width: 25%;border: solid 1px #bbbbbb;background-color: #ffdddd;vertical-align: center;text-align: right;">
</xsl:if>
<xsl:if test="sex='C'">
<td style="width: 25%;border: solid 1px #bbbbbb;background-color: #ddffdd;vertical-align: center;text-align: right;">
</xsl:if>

自己解決です。

Posted: 2005年11月11日(金) 23:04
by シンP
単に「xsl:if」内に、<td></td>を収めればよかったんですね。。。

お馬鹿な質問して申し訳ありませんでした。

Re: 自己解決です。

Posted: 2005年11月12日(土) 10:43
by webmaster
 webmasterです。
 自己解決されたようで、あまりお役に立てず申し訳ありません。

 XMLのこのへんの「クセ」みたいなものは、慣れるまで大変かもしれませんが、
またご不明な点がありましたらお気軽にご質問頂ければと思います。
 以上、よろしくお願い致します。

たびたび

Posted: 2005年12月05日(月) 01:55
by シンP
たびたび申し訳ありません。

やはり

<xsl:if test="hoge/text()">

が効かなかったので

<xsl:if test="not(hoge='')">

としたら、目的の動作を得ることが出来ました。
この記述にまずい点がありましたらご指摘いただきたいです。

Re: たびたび

Posted: 2005年12月05日(月) 15:22
by webmaster
 webmasterです。シンPさんいつもありがとうございます。

<xsl:if test="not(hoge='')">

 については、not(hoge/text()='')と意味的に同じになりますので、問題は
ないかと思います。

<xsl:if test="hoge/text()">

 が効かないのがどうしてか分かりませんが・・・。
 こちらでも引き続き調査してみます。m(_ _)m