エスケープシーケンスについて

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
kappa

エスケープシーケンスについて

投稿記事 by kappa » 2005年12月20日(火) 12:40

初めまして
CMSデザイナーを少し使い始めて
すごく便利そうなので、いろんな使い方をしたいと思っております。
そこで、管理画面からタグなしでフォームを作成してみたいと思ったのですが、
<input type="text" name="<xsl:value-of select="××" disable-output-escaping="yes" />">
をxslに指定するとうまくいきませんでした。

「¥”」のエスケープシーケンスで試してもうまくいかなず、
「'」シングルクオートでもうまくいきませんでした。

何か方法ってありますか?
あればぜひ教えて欲しいです。

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

Re: エスケープシーケンスについて

投稿記事 by webmaster » 2005年12月20日(火) 17:27

 webmasterです。kappaさん、初めまして!

 ご質問の件ですが、タグの属性値にCMSDのデータ内容を挿入したい、という
事だと認識致しました。この方法でいかがでしょうか?

<input type="text" name="{××}">

 つまり、項目名を{}で囲ってください。

 タグの属性値にCMSDのデータを埋め込む方法は、「5.5.2 画像項目(img項目)を出力する。」
に詳しく解説してあります。単独の章を充てている訳ではないので、分かり難いと
思います。m(_ _)m

 もし回答内容がズレている場合は、お手数ですがご指摘頂ければと思います。
最後に編集したユーザー webmaster on 2005年12月22日(木) 17:17 [ 編集 1 回目 ]

kappa

re:返答

投稿記事 by kappa » 2005年12月22日(木) 15:48

お返事ありがとうございます。

うまくいけるようになりました。

しかしながら新たな問題が出てきました・・。
CMSデザイナーでマニュアルには
条件分岐が「if」構文で全ておこなわれておりますが、
複数分岐は可能ですか?

<xsl:choose>
<xsl:when test="answer_type='2' and answer_type_checkbox04='1'">
<xsl:for-each select="answer_type_checkbox/listitem">
<input type="radio" name="{answer_type_checkbox01}" value="{answer_type_checkbox03}" id="{answer_type_checkbox05}" /><xsl:value-of select="answer_type_checkbox02" />
</xsl:for-each>
</xsl:when>

<xsl:when test="answer_type='2' and answer_type_checkbox04='2'">
<xsl:for-each select="answer_type_checkbox/listitem">
<input type="radio" name="{answer_type_checkbox01}" value="{answer_type_checkbox03}" id="{answer_type_checkbox05}" /><xsl:value-of select="answer_type_checkbox02" />
</xsl:for-each>
</xsl:when>

</xsl:choose>

で試してみたのですが、うまくいきませんでした。

何か方法があれば教えていただけると嬉しいです。

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

Re: re:返答

投稿記事 by webmaster » 2005年12月22日(木) 17:23

 webmasterです。kappaさん、いつもご質問ありがとうございます。

 CMSDにて xsl:choose と xsl:when を使っていただく点については全く問題
ありません。

 XSLTのxsl:choose と xsl:when は、機能的には xsl:if を複数並べたものと
ほとんど違いが無く、XSLTに不慣れなユーザーさんの混乱を避ける為に、
全て xsl:if を使って説明させて頂いております。

 引用して頂いたXSLTを拝見しましたが、見たところ特に問題はなさそうに
思えます。

 何かエラーなどが出力されますでしょうか?

 もし、「何も出力されない」というような場合、test属性の内容に問題がある
可能性がありますので、一度スキーマも引用して頂ければ、もう少し詳しく
内容をチェックすることができるかと思います。

 以上、お手数ですがよろしくお願い致します。

ゲスト

投稿記事 by ゲスト » 2005年12月23日(金) 18:33

ご丁寧な回答ありがとうございます。
すごく質問がしやすくて嬉しいです。
あまりお手間をかけないようには努力したのですが、
やっぱりうまくいきませんでした。

スキーマは以下のような形です。


<data name="answer_type" type="menu" caption="質問タイプ">
<menuitem id="1">text</menuitem>
<menuitem id="2">checkbox</menuitem>
<menuitem id="3">radio</menuitem>
<menuitem id="4">textarea</menuitem>
<menuitem id="5">file</menuitem>
<menuitem id="6">hidden</menuitem>
</data>

<data name="answer_type_text01" type="text" caption="textの場合のname" />
<data name="answer_type_text02" type="text" caption="textの場合のid" />
<data name="answer_type_text03" type="text" caption="textの場合のsize" />
<data name="answer_type_text04" type="text" caption="textの場合のmaxlength" />

<data name="answer_type_checkbox" type="list" caption="checkboxの場合" >
<listitem caption="checkboxの内容">
<data name="answer_type_checkbox01" type="text" caption="checkboxの場合のname" />
<data name="answer_type_checkbox05" type="text" caption="checkboxの場合のid" />
<data name="answer_type_checkbox02" type="text" caption="選択肢" />
<data name="answer_type_checkbox03" type="text" caption="checkboxのvalue" />
<data name="answer_type_checkbox04" type="menu" caption="初期値:チェックありは0個or1個" >
<menuitem id="1">チェックなし</menuitem>
<menuitem id="2">チェックあり</menuitem>
</data>
</listitem>
</data>


やりたいこととしては管理者が、チェックボックスを選んだ場合に
checkedありの場合は<input type=radio name="A" value="A" checked>
checkなしの場合は<input type=radio name="A" value="A" >が
自動的に生成されれば良いと思っているのですが、

"answer_type='2' and answer_type_checkbox04='1'"
の条件式が認識されませんでした。

その為最後に

<xsl:otherwise test="answer_type='2' and answer_type_checkbox04='2'">
<xsl:for-each select="answer_type_checkbox/listitem">
×
</xsl:for-each>
</xsl:otherwise>

上記のタグを入れた場合、
   性別 × ×
という表示になってしまいます。

状態がうまく説明できなくて、
申し訳ないです。

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

投稿記事 by webmaster » 2005年12月24日(土) 16:54

 webmasterです。お返事が遅れまして申し訳ありません。

 デザイン定義側の、xsl:when要素のtest属性値に問題があるようです。
answer_type='2' and answer_type_checkbox04='1'
 この例では、answer_type と answer_type_checkbox04 を同列に and で
並べてありますが、実際のスキーマでは answer_type_checkbox04 は、
answer_type_checkbox というリスト項目内にある為、階層が異なります。

 この辺の話はXMLやXSLTに慣れていないと分かり難いかと思います。m(_ _)m
 (マニュアルでも、高度な使い方ということで説明を省いています)

 answer_type から見た、answer_type_checkbox04 の相対位置は、

コード: 全て選択

answer_type_checkbox/listitem/answer_type_checkbox04
 というパスになります。

 よってこの場合は、

コード: 全て選択

answer_type='2' and answer_type_checkbox/listitem/answer_type_checkbox04='1'
 という条件式でOKだと思います。

 ただ、恐らく意図されているのは、answer_type_checkbox のリスト項目内に
複数登録された「チェックボックスアイテム」を並べて出力したい、という事だと
思いますが、これだと場合によっては二重に出力されたりしてしまうと思います。

 まず、考え方として、

 ・answer_type='2' の場合に、answer_type_checkbox の中身を出力する。
 ・この歳に、answer_type_checkbox04 の値が'2'ならば checked を指定する。

 というように分けて考えた方が良いかもしれません。

コード: 全て選択

<!-- checkboxを選択 -->
<xsl:if test="answer_type='2'">
<xsl:for-each select="answer_type_checkbox/listitem">

<!-- チェックなしの場合 -->
<xsl:if test="answer_type_checkbox04='1'">
<input type="checkbox" name="{answer_type_checkbox01}" value="{answer_type_checkbox03}" id="{answer_type_checkbox05}" />
</xsl:if>

<!-- チェックありの場合 -->
<xsl:if test="answer_type_checkbox04='2'">
<input type="checkbox" name="{answer_type_checkbox01}" value="{answer_type_checkbox03}" id="{answer_type_checkbox05}" checked="checked" />
</xsl:if>

<xsl:value-of select="answer_type_checkbox02" />

</xsl:for-each>
</xsl:if>
 試しに書いてみました。実際に動かしていないので、誤字脱字などあるかもしれませんが、
基本的な考え方はこれで動くと思います。
 一度お試し頂ければ幸いです。

kappa

回答ありがとうございます。

投稿記事 by kappa » 2005年12月25日(日) 19:35

ご回答ありがとうございます。

上記で試してみます!

階層が違う場合、書き方が異なるんですね。
勉強になりました。

返信