- - PR -
call-templateでのwith paramの指定方法の (xsl) 質問です
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-01-01 19:56
xslスタイルシートのcall-template でparamを指定して
呼び出す方法についての質問です。 javascriptで動作する<a>タグの中に<img>タグを埋めこんだ"mylink"テンプレートを作成し 表のセルに call-templateで 呼び出すコードを書いたのですが imgタグだけでなく、textなどを埋めこんで呼び出せるように変更したいのです。 変更前のxsl(呼び出し部分) <tr><td style="border-width: 1; border-color: #3300FF; width: 100;"> <xsl:call-template name="mylink"/> </td> </tr> <xsl:template name="mylink">//変更前のmylinkテンプレート <xsl:element name="a"> <xsl:attribute name="href"> </xsl:attribute> <xsl:attribute name="ing"> <xsl:value-of select="@no" /> </xsl:attribute> <xsl:attribute name="onclick"> window.open(this.ing + '.html','newwindow');return false; </xsl:attribute> <xsl:element name="img">//埋めこんだimgタグ(注1) <xsl:attribute name="src"> <xsl:value-of select="concat('image/',iname,'.jpg')" /> </xsl:attribute> </xsl:element>//imgタグの終了(注2) </xsl:element> </xsl:template> この状態だと、うまく作動するのですが 注1から注2の部分を、paramで指定して呼び出すことで、imgだけでなく textなども呼び出せるようにmylinkテンプレートを改良したいのです。 変更後のxsl(呼び出し側部分、この場合は上と同じimgを指定して呼び出したいのです) <tr><td style="border-width: 1; border-color: #3300FF; width: 100;"> <xsl:call-template name="mylink"> <xsl:with-param name="content">//パラメータを指定している部分(注3) <xsl:element name="img"> <xsl:attribute name="src"> <xsl:value-of select="concat('image/',iname,'.jpg')" /> </xsl:attribute> </xsl:element> </xsl:with-param>//パラメーターの指定終了(注4) </xsl:call-template> </td> </tr> <xsl:template name="mylink">//変更後のmylinkテンプレート部分 <xsl:param name="content"> <xsl:element name="a"> <xsl:attribute name="href"> </xsl:attribute> <xsl:attribute name="ing"> <xsl:value-of select="@no" /> </xsl:attribute> <xsl:attribute name="onclick"> window.open(this.ing + '.html','newwindow');return false; </xsl:attribute> <xsl:value-of select="$content">// この部分がわかりません(注5) </xsl:element> </xsl:param> </xsl:template> 色々上記以外にも、注3から注5までの部分を変えて試して見たのですが エラーになってしまいます。 注3から注4までのparamの指定で、上のように<img>から</img>のような ひとまとまりのタグを指定することはできないのでしょうか? それとも注5のように value-ofで、 パラメーターを呼び出すのがこの場合は間違っているのでしょうか? 他にいい方法などがあれば、アドバイスよろしくお願いします。 |
|
投稿日時: 2006-01-01 21:02
http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#value-of
xsl:value-of エレメントをインスタンス化すると、結果ツリー内にテキストノードが生成される。 必須の select アトリビュートは、式である。 この式を評価すると、string 関数の呼び出しを実行したかのように、結果のオブジェクトを文字列に変換する。 param値は 文字列型ではない。<<<<<<<< ● ● ● http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#copy-of xsl:copy-of エレメントを使用すると、結果ツリーフラグメントを結果ツリーに挿入できる。 この場合、xsl:value-of を使用する場合のように ([7.6.1 xsl:value-of を用いたテキストの生成] を参照)、最初に文字列に変換する必要はない。 ------------- 7.1.1 リテラル結果エレメント http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116-jpn.htm#literal-result-element の書き方のほうが行数少なく読みやすいです |
|
投稿日時: 2006-01-02 02:38
MMXさん、アドバイスありがとうございます。
せっかく示していただいた仕様書のほうは、まだまだ理解不足であり 読んでもほとんどわからなかったのですが、 value-ofではなく、複数のタグを含んだ全体をpalamに指定して 呼び出す場合は、copy-ofにすべきということなのだろうと 試してなんとかできました。 おそらく、まだ無駄の多いコードになっているのでしょうし >7.1.1 リテラル結果エレメント >http://www.infoteria.com/jp/contents/xml-data/REC-xslt-19991116->jpn.htm#literal-result-element >の書き方のほうが行数少なく読みやすいです この書き方も理解できていないのですが、少しずつ勉強していきますので 今後とも宜しくお願いします。 |
1