将<xsl:variable>字符串值转换为我可以使用<xsl:value-of select =“”> </xsl:value-of> </xsl:variable>选择的值

时间:2012-06-19 14:29:37

标签: xslt xpath

我有一个变量,我需要动态生成节点

<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>

&LT; XSL:value-of的&GT;选择字符串,但我希望能够选择名称与变量名称匹配的节点。 在我的例子中,节点看起来像这样:

<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> 

2 个答案:

答案 0 :(得分:1)

使用<xsl:value-of select="*[local-name() = $link]"/>。如果这没有帮助,那么考虑显示XML的样本。

答案 1 :(得分:1)

@MartinHonnen在正确的轨道上,但您也需要设置选择上下文。

由于您在选择banner_discount_节点的模板中,这就是您的上下文。从您的XML示例中,您看起来想要选择的节点是兄弟节点,因此这应该有效:

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

最好直接定位节点,但如果它们可以在文档中的任何位置,那么您可以诉诸

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

这是最后的手段,因为它相对于文档中的节点数可能是O(n)。