2008-08-07 14 views
13

私はこれがGoogleにとっては簡単だと思っていただろうが、私は不合理だ。ノードを選択しようとすると、xslで変数をどのように使用しますか?

私はその属性の値に基づいて別のノードを選択するために、その変数を使用します(簡単にこれまでの)属性のうち、変数に値を割り当てます。

例:動作しません

<xsl:variable name="myId" select="@id" /> 
<xsl value-of select="//Root/Some/Other/Path/Where[@id='{@myId}']/@Name /> 

。変数にある値で{@myId}を置き換えた場合、正しいノードが見つかりますが、この方法では何も生成されません。私は何かが不足していると確信している、またはおそらくそれを行う別の方法があります。

コンテキストは、私は私のテンプレートに関連するノードを取得する必要がありますので、同じid値を共有する別のトップレベルのノードの下に関連するデータがあるということです。

答えて

16

[OK]を、私はついにそれを考え出しました。愚かな問題本当に、私は単に引用符と中括弧を外す必要がありました。そのうちの1つ私がと思ったのはだと私はすでにそれを試みていました。 :Dああ、最初の例では@myIdを間違っていましたが、コードは実際は$ myIdでした。

あなたが(ちょうど$変数)変数を使用して混乱して持っているように見えると、例えば、あなたはいくつかの属性における任意のXPath式を置くことを許可する値テンプレートを、属性
<xsl:variable name="myId" select="@id" /> 
<xsl value-of select="//Root/Some/Other/Path/Where[@id=$myId]/@Name" /> 
+0

があってはならない引用符がまだありますが。それは非常に小さな編集ですので、テキスト(最小文字数制限)も変更せずにはできません。 は ます。

+0

ありがとう、私はそれが今正しいと思います。私はまた、最後の最後の二重引用符も忘れました。 – palehorse

4

<newElement Id="{@Id}"/> 

次のような属性値テンプレート内の変数、含めることができるように彼らは明らかに、組み合わせることができます

<newElement Id="{$myId}"/> 
関連する問題