当我输出纯文本时,我不能以这种方式访问​​我的xsl:variable

时间:2017-06-02 14:39:12

标签: xslt xslt-1.0

我正在做一个为我生成sql语句的xslt转换。我在下面使用的方式不起作用。有办法吗?

<xsl:template match="foo">
<xsl:variable name="var1" select="@att_val1" />

select $var1.* from $var1

</xsl:template>

我知道如果我这样做会有效:

<xsl:template match="foo">

select <xsl:value-of select="@att_val1" />.* from <xsl:value-of select="@att_val1" />

</xsl:template>

2 个答案:

答案 0 :(得分:2)

在XSLT 1.0中,变量引用在XPath表达式中被识别,但在一般模板文本中不被识别。要评估XPath表达式并将结果作为结果树中的文本节点输出,请使用xsl:value-of,因为您已经知道如何操作。例如:

<xsl:template match="foo">
<xsl:variable name="var1" select="@att_val1" />
select <xsl:value-of select="$var1"/>.* from <xsl:value-of select="$var1"/>
</xsl:template>

或者,您可以使用select函数在一个xsl:value-of中构建整个concat()命令。

答案 1 :(得分:1)

除非您转到XSLT 3.0(https://www.w3.org/TR/xslt-30/#text-value-templates),否则您可以执行以下操作: <xsl:template match="foo" expand-text="yes">select {@att_val1}.* from {@att_val1}</xsl:template>您必须使用第二个选项或<xsl:template match="foo"><xsl:value-of select="concat('select ', @att_val1, '.* from ', @att_val1)"/></xsl:template>,但XSLT 1.0中肯定无法完全避免使用xsl:value-of