Comment implémenter l'instruction if-else dans XSLT?
J'essaie d'implémenter une instruction if-else dans XSLT mais mon code n'analyse tout simplement pas. Quelqu'un aurait-il des idées?
<xsl:variable name="CreatedDate" select="@createDate"/>
<xsl:variable name="IDAppendedDate" select="2012-01-01" />
<b>date: <xsl:value-of select="$CreatedDate"/></b>
<xsl:if test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:if>
<xsl:else>
<h2> dooooooooooooo </h2>
</xsl:else>
4 réponses
Vous devez le réimplémenter en utilisant <xsl:choose>
tag:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:when>
<xsl:otherwise>
<h2> dooooooooooooo </h2>
</xsl:otherwise>
</xsl:choose>
L'instruction If est utilisée pour vérifier rapidement une seule condition.
Lorsque vous avez plusieurs options, utilisez <xsl:choose>
, comme illustré ci-dessous:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2>mooooooooooooo</h2>
</xsl:when>
<xsl:otherwise>
<h2>dooooooooooooo</h2>
</xsl:otherwise>
</xsl:choose>
Vous pouvez également utiliser plusieurs balises <xsl:when>
pour exprimer des motifs If .. Else If
ou Switch
comme illustré ci-dessous:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2>mooooooooooooo</h2>
</xsl:when>
<xsl:when test="$CreatedDate = $IDAppendedDate">
<h2>booooooooooooo</h2>
</xsl:when>
<xsl:otherwise>
<h2>dooooooooooooo</h2>
</xsl:otherwise>
</xsl:choose>
L'exemple précédent serait équivalent au pseudocode ci-dessous:
if ($CreatedDate > $IDAppendedDate)
{
output: <h2>mooooooooooooo</h2>
}
else if ($CreatedDate = $IDAppendedDate)
{
output: <h2>booooooooooooo</h2>
}
else
{
output: <h2>dooooooooooooo</h2>
}
Si je peux offrir quelques suggestions (deux ans plus tard, mais j'espère utile aux futurs lecteurs):
- factorisez l'élément commun
h2
. - factorisez le texte commun
ooooooooooooo
. - soyez conscient de la nouvelle construction XPath 2.0
if/then/else
Si vous utilisez XSLT 2.0.
XSLT 1.0 Solution (fonctionne également avec XSLT 2.0)
<h2>
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">m</xsl:when>
<xsl:otherwise>d</xsl:otherwise>
</xsl:choose>
ooooooooooooo
</h2>
Solution XSLT 2.0
<h2>
<xsl:value-of select="if ($CreatedDate > $IDAppendedDate) then 'm' else 'd'"/>
ooooooooooooo
</h2>
L'approche la plus simple consiste à faire un deuxième if-test mais avec la condition inversée. Cette technique est plus courte, plus facile pour les yeux, et plus facile à obtenir qu'un bloc choisir-quand-sinon imbriqué:
<xsl:variable name="CreatedDate" select="@createDate"/>
<xsl:variable name="IDAppendedDate" select="2012-01-01" />
<b>date: <xsl:value-of select="$CreatedDate"/></b>
<xsl:if test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:if>
<xsl:if test="$CreatedDate <= $IDAppendedDate">
<h2> dooooooooooooo </h2>
</xsl:if>
Voici un exemple réel de la technique utilisée dans la feuille de style pour un site web gouvernemental: http://w1.weather.gov/xml/current_obs/latest_ob.xsl