2017-06-02 2 views
0

Ich mache eine XSLT-Transformation, die eine SQL-Anweisung für mich generiert. Die Art, wie ich unten verwende, funktioniert nicht. Gibt es einen Weg?Kann ich nicht auf meine xsl: -Variable zugreifen, wenn ich Klartext ausgib

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

select $var1.* from $var1 

</xsl:template> 

Ich weiß, es wird funktionieren, wenn ich dies tun:

<xsl:template match="foo"> 

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

</xsl:template> 

Antwort

2

In XSLT 1.0 werden Variablenreferenzen in XPath-Ausdrücken erkannt, nicht jedoch im allgemeinen Vorlagentext. Um einen XPath-Ausdruck auszuwerten und das Ergebnis als Textknoten in der Ergebnisbaumstruktur auszugeben, verwenden Sie xsl:value-of, wie Sie bereits wissen. Beispiel:

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

Alternativ könnten Sie den ganzen select Befehl in einem xsl:value-of mit der Nutzung der concat() Funktion bauen.

1

Es sei denn, Sie 3.0 (https://www.w3.org/TR/xslt-30/#text-value-templates) XSLT verschieben, wo Sie zum Beispiel tun können <xsl:template match="foo" expand-text="yes">select {@att_val1}.* from {@att_val1}</xsl:template> müssen Sie Ihre zweite Option oder vielleicht eine <xsl:template match="foo"><xsl:value-of select="concat('select ', @att_val1, '.* from ', @att_val1)"/></xsl:template> verwenden, aber es gibt sicherlich keine Möglichkeit in XSLT 1.0, die Verwendung von xsl:value-of vollständig zu vermeiden.

Verwandte Themen