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