2016-07-20 6 views
0

Ich habe eine Grundbedingung, die prüft, ob eine Variable leer ist und ob die Variable auf einen bestimmten Wert gesetzt ist.Setzen eines Wertes in einer Variablen auf if-Bedingungen mit XSL

<xsl:variable name="PIC" select="avatar"/> 

<xsl:choose> 
    <xsl:when test="avatar !=''"> 
    <xsl:variable name="PIC" select="avatar"/> 
    </xsl:when> 
    <xsl:otherwise> 
    <xsl:variable name="PIC" select="'placeholder.jpg'"/> 
    </xsl:otherwise> 
</xsl:choose> 

Grundsätzlich var PIC ist unabhängig von avatar kehrt zurück. Dann wird ein Test durchgeführt, um zu prüfen, ob, wenn es nicht leer ist und var PIC zugeordnet ist, und wenn es leer ist, ein Wert placeholder.jpg stattdessen zu var PIC hinzugefügt wird.

Jetzt aus irgendeinem Grund Ich erhalte die folgende Warnung

A variable with no following sibling instructions has no effect

Alle Ideen, was ich hier falsch mache?

Antwort

1

Variablen sind in XSLT unveränderlich und können nach dem Festlegen nicht mehr geändert werden. Die Variablendeklarationen in xsl:choose sind einfach neue Deklarationen, die bei local im Umfang zum aktuellen Block gehören. (Sie sollen die Anfangsvariable "beschatten").

Was Sie tun müssen, ist dies ...

<xsl:variable name="PIC"> 
    <xsl:choose> 
    <xsl:when test="avatar !=''"> 
     <xsl:value-of select="avatar"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="'placeholder.jpg'"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
+0

Heute etwas Neues gelernt, danke für Ihre ausführliche Erklärung hinter Ihrem Beispiel, schätzen Sie es Tim. – BaconJuice

0

xsl:variable als <xsl:variable name="PIC" select="if (avatar != '') then avatar else 'placeholder.jpg'"/> einmaligen Gebrauch.