xsl example else choose attribute xml xslt if-statement

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 &gt; $IDAppendedDate"> <h2> mooooooooooooo </h2> </xsl:if> <xsl:if test="$CreatedDate &lt;= $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 elemento h2 común.
  • ooooooooooooo texto ooooooooooooo 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>