使用模板参数连接选择路径xslt

时间:2015-06-09 06:45:42

标签: xml xslt

我正在尝试多种不同的方法来创建可重复使用的模板,但遇到了问题:

 <xsl:template name="translation">
    <xsl:param name="labelName"/>
    <xsl:value-of select="concat('/Response/Localisation/',$labelName,'/.')"/>
 </xsl:template>


<xsl:template name="translation">
    <xsl:param name="labelName"/>
    <xsl:value-of select="/Response/Localisation/$labelName/."/>
</xsl:template>

我想像这样使用模板:

<xsl:call-template name="translation">
    <xsl:with-param name="labelName" select="ReportsSelection" />
</xsl:call-template>

基本上,当我调用模板时,我希望从xml中获取值,在本例中为“Response / Localization / ReportsSelection”。

目前虽然我被赋予了文字字符串版本而不是xml中的值。

我不经常使用xslt。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

    <xsl:call-template name="translation">
        <xsl:with-param name="labelName" select="'ReportsSelection'"/>
    </xsl:call-template>

有了这个:

<xsl:template name="translation">
    <xsl:param name="labelName"/>
    <xsl:value-of select="/Response/Localisation/*[local-name()=$labelName]"/>
</xsl:template>

答案 1 :(得分:2)

路径步骤中的变量似乎不允许,但您可以将变量用作文字字符串,并使用以下技巧:

<xsl:template name="translation">
    <xsl:param name="labelName"/>
    <xsl:value-of select="/Response/Localisation/*[name()=$labelName]/."/>
</xsl:template>

上面的xpath选择器匹配任何元素(*),然后根据变量($labelName

提供的文字字符串对其元素进行过滤