1

ノードを動的に生成する必要がある変数があります

<xsl:template match="banner_discount_1 | banner_discount_2 | banner_discount_3"> 
    <xsl:variable name="link">banner_discount_<xsl:value-of select="substring-after(name(.) ,'banner_discount_')" />_link</xsl:variable>

    <xsl:value-of select="$link" />
</xsl:template>

<xsl:value-of> は文字列を選択しますが、変数の名前と一致する名前のノードを選択できるようにしたいと考えています。私の場合、ノードは次のようになります。

<banner_discount_1_link />
<banner_discount_2_link />
...

これが私が使用しているxmlです

<banner_discount_1> 12 </banner_discount_1>
<banner_discount_2> 21 </banner_discount_2>
<banner_discount_3> 32 </banner_discount_3>

<banner_discount_1_link> link1 </banner_discount_1_link>
<banner_discount_2_link> link2 </banner_discount_2_link>
<banner_discount_3_link> link3 </banner_discount_3_link> 
4

2 に答える 2

1

を使用し<xsl:value-of select="*[local-name() = $link]"/>ます。それでも解決しない場合は、XML のサンプルを表示することを検討してください。

于 2012-06-19T14:32:33.207 に答える
1

@MartinHonnen は正しい軌道に乗っていますが、選択コンテ​​キストも設定する必要があります。

ノードを選択しているテンプレートにいるのでbanner_discount_、それがコンテキストです。あなたの XML サンプルから、選択したいノードは兄弟であるように見えるので、これはうまくいくはずです:

<xsl:value-of select="../*[local-name() = $link]"/>

ノードを直接ターゲットにすることが望ましいですが、ノードがドキュメントのどこにでもある可能性がある場合は、

<xsl:value-of select="//*[local-name() = $link]"/>

ドキュメント内のノード数に関して O(n) になる可能性があるため、これは最後の手段です。

于 2012-06-19T14:46:34.930 に答える