我有一个变量,我需要动态生成节点
<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>
答案 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)。