2017-06-02 4 views
0

Je fais une transformation xslt qui génère une instruction SQL pour moi. La façon dont j'utilise ci-dessous ne fonctionne pas. Y a-t-il un moyen?Puis-je ne pas accéder à ma variable xsl: de cette façon lorsque je produis du texte en clair

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

select $var1.* from $var1 

</xsl:template> 

Je sais que cela va fonctionner si je fais ceci:

<xsl:template match="foo"> 

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

</xsl:template> 

Répondre

2

Dans XSLT 1.0, les références de variable sont reconnues dans les expressions XPath, mais pas dans le texte de modèle général. Pour évaluer une expression XPath et afficher le résultat sous la forme d'un nœud de texte dans l'arborescence des résultats, utilisez xsl:value-of, comme vous le savez déjà. Exemple:

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

Sinon, vous pouvez construire toute commande select dans un xsl:value-of avec l'utilisation de la fonction concat().

1

À moins que vous passez à XSLT 3.0 (https://www.w3.org/TR/xslt-30/#text-value-templates) où vous pouvez le faire par exemple <xsl:template match="foo" expand-text="yes">select {@att_val1}.* from {@att_val1}</xsl:template> vous devrez utiliser votre deuxième option ou peut-être un <xsl:template match="foo"><xsl:value-of select="concat('select ', @att_val1, '.* from ', @att_val1)"/></xsl:template>, mais il n'y a certainement aucun moyen dans XSLT 1.0 pour éviter l'utilisation de xsl:value-of complètement.