質問
Google にとってこれは簡単なことだと思っていたのですが、うまくいきませんでした。
属性の値を変数に割り当てて(ここまでは簡単です)、その変数を使用して、その属性の値に基づいて別のノードを選択したいと考えています。
例:
<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id='{@myId}']/@Name />
それはうまくいきません。{@myId} を変数内の値に置き換えると、正しいノードが見つかりますが、このように実行しても何も生成されません。きっと何かが足りないか、あるいは別の方法があるのでしょう。
コンテキストとしては、同じ ID 値を共有するさまざまなトップレベル ノードの下に関連データがあるため、テンプレートで関連ノードを取得する必要があるということです。
解決
わかりました、ついにわかりました。本当に愚かな問題ですが、引用符と中括弧を省略するだけで済みました。そのうちの一つ、私が 考え 私はそれをすでに試していたことを。:D ああ、最初の例で @myId を打ち間違えました。コードは実際には $myId でした。
<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id=$myId]/@Name" />
他のヒント
変数 (単なる $variable) と属性値テンプレートの使用を混同しているようです。属性値テンプレートを使用すると、一部の属性に任意の XPath 式を入れることができます。
<newElement Id="{@Id}"/>
これらは明らかに組み合わせることができるため、次のような変数を属性値テンプレートに含めることができます。
<newElement Id="{$myId}"/>
所属していません StackOverflow