アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、Khazadと申します。


 xsl:variableで、xsl:apply-templates の抽出条件を変更したくて
下記のようなXSLを作成したのですが、うまくいきません。
 原因がわかる方。または別の方法があればご教授お願いできないでしょうか?

 パーサーはMSXML3.0です。

(試したこと)

1 テンプレート内に<xsl:value-of select='$frid'/>を挿入すると、
  ちゃんと1が表示されます。

2 [@rid='{$frid}']の部分を[@rid='$frid']に変更しても抽出は
  行われません。

3 [@rid='{$frid}']の部分を[@rid='1']にすると抽出されます。


 以下XSLのソースです
--------------------------------------------------------
<xsl:variable name = 'frid' select='1' ></xsl:variable>


<xsl:template match="/">
<xsl:apply-templates select="ROOT//*[@rid='{$frid}']"/>
</xsl:template>

<xsl:template match="*[@rid='{$frid}']">
<xsl:apply-templates select="*"/>
</xsl:template>
--------------------------------------------------------

A 回答 (4件)

 方手落ちでした。

すいません。
<xsl:template match="*" name="foo">
 あは
</xsl>
は、

<xsl:apply-templates select="*" name="foo" />

 でいけたと記憶してます。
 検証をしておりませんので、間違っている可能性が
ありますが、取り急ぎ。
 うまくいかなかったら、りぷらいをお願いします。
    • good
    • 0
この回答へのお礼

ありがとうございます。

それを見本にテストしたのですが、
"Attribute 'name' is invalid on 'xsl:apply-templates'"
だそうです。(上記はエラーメッセージです。)

 ただ、kaihou100さんの回答をヒントにW3C勧告のページをもう一度よく
見てみると、xsl:apply-templatesには、modeという属性があり、
それを用いると、意図した処理(テンプレートの切り替え)が可能に
なりました。

 このあたりは単純にパーサーの実装の違いということでしょうね…。

 

お礼日時:2002/06/20 14:38

 アドバイスというより雑談ですが(^^;;


 それは単に間違えただけです。すいません…
    • good
    • 0
この回答へのお礼

>それは単に間違えただけです。すいません…

いえいえ。すごく助かりました。ありがとうございます。

お礼日時:2002/06/20 16:00

<xsl:template match="..." name="...">


 ...
</xsl:template>
 のように、nameアトリビュートで逃げるのは、アウトですか?

 MS-XMLは分からないのですが、Xalanならこれでうまくいくはずです。

この回答への補足

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

これがうまくいくのならかなりBESTに近いです。
 ただ、この場合、呼び出し方はどうなるのでしょうか?

 apply-templatesなのか、call-templateなのか、
nameはどう指定するのか。

 W3C 勧告 の翻訳ページを見てもそのあたりが探しきれなかったので…。

 よろしければ教えていただけないでしょうか?

#実は、今回はテンプレートを1つにまとめてXSL:chooseで
#場合わけを行う方法で対処しました。

補足日時:2002/06/20 10:50
    • good
    • 0

<xsl:template match="/">


<xsl:apply-templates select="ROOT//*[@rid=$frid]"/>
</xsl:template>

<xsl:template match="*">

</xsl:template>

でしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえずこれでうまくいきました。

xsl:templateのmatchの内部には変数での指定ができない
みたいですね…。
長くなるので省略していたのですが、実はそのtemplate内で
apply-templateを使用しているので、"*"ではループしてしまうの
です…。

 とりあえずcall-template等でうまく行かないかがんばってみます。

お礼日時:2002/06/18 22:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!