- PR -

xsl:if test=の書き方について

1
投稿者投稿内容
sarara
会議室デビュー日: 2005/08/03
投稿数: 2
投稿日時: 2005-08-03 12:04
はじめまして。研修でjavaやスタイルシートを学んでいる者です。
今回、スタイルシートで画面を表示して、XMLでDBに入れたデータをもとにラジオボタンの選択を変えるということをしているのですが、
test="??"の書き方がわからず困っております。
初歩の質問だとは思いますが、ご教授お願いいたします。

XML文書
<?xml version="1.0" encoding="Shift_JIS"?>
<USER>
<USERCOLOR>blue
</USERCOLOR>
</USER>

スタイルシート
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ino="http://namespaces.softwareag.com/tamino/response2" xmlns:xql="http://metalab.unc.edu/xql/">
<xsl:output method="html" version="4.0" encoding="Shift_JIS"/>
<xsl:template match="ino:response">


<tr><td>
<xsl:choose>
<xsl:when test="USERCOLOR='blue'">

<input type="radio" name="color" value ="blue" style="background-color: #99CCFF" checked="checked"/>
<input type="radio" name="color" value ="red" style="background-color: #FFC0CB" />

</xsl:when>
<xsl:otherwise>
<input type="radio" name="color" value ="blue" style="background-color: #99CCFF" />
<input type="radio" name="color" value ="red" style="background-color: #FFC0CB" checked="checked"/>
</xsl:otherwise>
</xsl:choose>
</td></tr>


</xsl:template>
</xsl:stylesheet>
---ここまで

この状態だと、赤の方にチェックされたラジオボタンが表示されます。
<xsl:for-each select="USER">
<xsl:value-of select="USERCOLOR"/>
</xsl:for-each>
と入れるとblueと表示されるので、<xsl:when test="USERCOLOR='blue'">の書き方がおかしいのだと思います。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-08-03 12:42
parent軸を使って 親ノードを確認。

用語
コンテキストノード、カレントノード
式中のUSERCOLORは、コンテキスト/USERCOLOR が絶対XPATHとみなされます。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-08-03 12:43
情報は正確に書きましょうね。

もし、ino:response というのが USER のことなら、
test="normalize-space(string(USERCOLOR)) = 'blue'"
ではどうでしょうか。
sarara
会議室デビュー日: 2005/08/03
投稿数: 2
投稿日時: 2005-08-03 14:56
ありがとうございます。
スフレさんの書き方を参考に
test="normalize-space(string(..//USERCOLOR)) = 'blue'"
とやったら、望み通りの表示がされました。

この書き方を見ればわかるでしょうが、私がノードの関係がよくわかってなかったため表示されなかったようです。
MMXさんの提示してくれたキーワードを参考に勉強します。

お二方とも本当にありがとうございました。
1

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