2014-07-08 1 views
0

Mes noeuds record ont un @code comme USA et label comme "États-Unis".Vous essayez de spécifier une valeur par défaut pour une liste déroulante avec xslt?

<xsl:for-each select="/output/module/countries/data/record"> 
    <xsl:call-template name="option"> 
    <xsl:with-param name="value" select="@code"/> 
    <xsl:with-param name="label" select="@name"/> 
    <!-- 
     <xsl:with-param name="select" select="/output/module/formdata/data/record/billing_info/country"/> 
    --> 
    <xsl:param name="value" value="USA" /> 
    </xsl:call-template> 
</xsl:for-each> 

J'essaye de faire USA la valeur par défaut. Je ai essayé with:param name="select" select="USA" mais c'est un pas non plus. Hmm?

Idéalement, je voudrais avoir USA être la valeur par défaut si l'autre noeud spécifié dans les commentaires n'a pas de valeur.

+0

Quelle version de XSLT? –

Répondre

1

Dans XSLT 2.0, vous pouvez utiliser un if dans le select:

<xsl:with-param name="select" select="if (x) then x else 'USA'"/> 

Il suffit de remplacer les deux instances de x avec votre XPath (/output/module/formdata/data/record/billing_info/country).

Dans XSLT 1.0, vous pouvez ajouter un xsl:choose à votre modèle option pour tester la valeur de la select param qui est passé quelque chose comme:.

<xsl:choose> 
    <xsl:when test="string($select)"> 
     <xsl:value-of select="$select"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:text>USA</xsl:text> 
    </xsl:otherwise> 
</xsl:choose> 

Vous pouvez mettre cette xsl:choose dans un xsl:variable s'il est plus facile à utiliser (comme dans les valeurs d'attribut ou si vous avez besoin d'accéder à la valeur plusieurs fois).

1

Voilà comment vous pouvez le faire dans une version de XSLT:

<xsl:variable name="countryVal" 
       select="/output/module/formdata/data/record/billing_info/country" /> 
<xsl:variable name="countryOrDefault" 
      select="concat($countryVal, 
         substring('USA', 1, 3 * not(normalize-space($countryVal)))" /> 
<xsl:for-each select="/output/module/countries/data/record"> 
    <xsl:call-template name="option"> 
    <xsl:with-param name="value" select="@code"/> 
    <xsl:with-param name="label" select="@name"/> 
    <xsl:with-param name="select" select="$countryOrDefault"/> 
    </xsl:call-template> 
</xsl:for-each> 
Questions connexes