Me gustaría utilizar el valor de un parámetro xslt en una expresión xpath. Específicamente, como parte de una llamada not()
en una expresión <xsl:if
.¿Es posible utilizar una expresión Dynamic xPath en una hoja de estilo xslt?
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- my_param contains a string '/foo/bar', passed in from ant -->
<!-- the 'no' is just a default value -->
<xsl:param name="my_param">no</xsl:param>
<xsl:variable name="var_myparam" select="$my_param" />
<!-- ... -->
<!-- this works -->
<xsl:if test="not(/foo/bar)" /> <!-- expression returns boolean true -->
<!-- ... -->
</xsl:if>
<!-- I can't figure out how to do this the right way -->
<!-- None of these appear to work -->
<xsl:if test="not($var_myparam)" /> <!-- expression returns boolean false -->
<!-- ... -->
</xsl:if>
<xsl:if test="not({$var_myparam})" /> <!-- complains Required attribute 'test' is missing -->
<!-- ... -->
</xsl:if>
<xsl:if test="not({$myparam})" /> <!-- complains Required attribute 'test' is missing -->
<!-- ... -->
</xsl:if>
<xsl:if test="not($myparam)" /> <!-- expression returns boolean false -->
<!-- ... -->
</xsl:if>
</xsl:transform>
Estoy un poco claro en lo que la sintaxis correcta es para crear una expresión XPath dinámica en una hoja de estilo XSLT. También estoy un poco confuso sobre la diferencia entre un parámetro, una variable y cómo la expansión de ambos funciona. Por ejemplo, con parámetros, sé que a veces necesito los corchetes, y a veces no.
<!-- when creating an element, it seems I need brackets -->
<xsl:element name="{$my_param}" />
<!-- when selecting an element value for the output stream, no brackets are needed -->
<xsl:value-of select="$my_param"/>
Cualquier ayuda general/específica sería muy apreciada.
Véase también http://stackoverflow.com/questions/4630023/dynamic-xpath-in-xslt – Vadzim