ノードを選択しようとするときに、xsl で変数をどのように使用しますか?

StackOverflow https://stackoverflow.com/questions/5374

  •  08-06-2019
  •  | 
  •  

質問

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}"/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top