xml - example - xsl if xslt else
¿Cómo implementar la declaración if-else en XSLT? (4)
Estoy tratando de implementar una declaración if -else en XSLT pero mi código simplemente no analiza. ¿Alguien tiene alguna idea?
<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>
El enfoque más directo es hacer una segunda prueba if pero con la condición invertida. Esta técnica es más corta, más fácil para los ojos y más fácil de obtener a la derecha que un bloque anidado de elección cuando esté:
<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>
Aquí hay un ejemplo del mundo real de la técnica que se utiliza en la hoja de estilo para un sitio web del gobierno: http://w1.weather.gov/xml/current_obs/latest_ob.xsl
Si la declaración se usa para verificar una sola condición rápidamente. Cuando tiene múltiples opciones, use <xsl:choose>
como se ilustra a continuación:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2>mooooooooooooo</h2>
</xsl:when>
<xsl:otherwise>
<h2>dooooooooooooo</h2>
</xsl:otherwise>
</xsl:choose>
Además, puede usar varias etiquetas <xsl:when>
para expresar If .. Else If
o Switch
patterns como se ilustra a continuación:
<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>
El ejemplo anterior sería equivalente al pseudocódigo a continuación:
if ($CreatedDate > $IDAppendedDate)
{
output: <h2>mooooooooooooo</h2>
}
else if ($CreatedDate = $IDAppendedDate)
{
output: <h2>booooooooooooo</h2>
}
else
{
output: <h2>dooooooooooooo</h2>
}
Tienes que volver a implementarlo usando la etiqueta <xsl:choose>
:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:when>
<xsl:otherwise>
<h2> dooooooooooooo </h2>
</xsl:otherwise>
</xsl:choose>
Si puedo ofrecer algunas sugerencias (dos años más tarde, pero espero que sean útiles para los futuros lectores) :
-
h2
elementoh2
común. -
ooooooooooooo
textoooooooooooooo
común. - Tenga en cuenta la nueva construcción XPath 2.0
if/then/else
si usa XSLT 2.0.
Solución XSLT 1.0 (también funciona con XSLT 2.0)
<h2>
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">m</xsl:when>
<xsl:otherwise>d</xsl:otherwise>
</xsl:choose>
ooooooooooooo
</h2>
Solución XSLT 2.0
<h2>
<xsl:value-of select="if ($CreatedDate > $IDAppendedDate) then ''m'' else ''d''"/>
ooooooooooooo
</h2>