Ist es möglich, eine Dynamische xPath-Ausdruck im xslt-Stylesheet?

Ich gerne den Wert eines xslt-parameter in einem xpath-Ausdruck. Insbesondere als Teil einer not() Aufruf in einem <xsl:if Ausdruck.

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

Bin ich ein wenig unklar, was die richtige syntax für das erstellen einer dynamischen xpath-Ausdruck im xslt-Stylesheet. Ich bin auch ein wenig verschwommen auf den Unterschied zwischen einem Parameter, einer variable und wie expanstion der beiden Werke. Zum Beispiel, mit den Parametern, ich weiß, dass ich manchmal müssen Sie die Klammern, und manchmal habe ich nicht.

<!-- 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"/>

Allgemeine/spezifische Hilfe würde sehr geschätzt werden.

InformationsquelleAutor Alan Storm | 2009-10-11

Schreibe einen Kommentar