我正在做一个为我生成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>
答案 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
。