Como implementar a declaração if-else no XSLT?
Estou a tentar implementar uma declaração if-else no XSLT, mas o meu código não se compara. Alguém tem alguma ideia?
<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>
136
4 answers
Tem de reimplementá-lo usando <xsl:choose>
etiqueta:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2> mooooooooooooo </h2>
</xsl:when>
<xsl:otherwise>
<h2> dooooooooooooo </h2>
</xsl:otherwise>
</xsl:choose>
250
Author: px1mp, 2012-11-29 09:25:48
Se a declaração for usada para verificar apenas uma condição rapidamente.
Quando tiver várias opções, utilize <xsl:choose>
como ilustrado abaixo:
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">
<h2>mooooooooooooo</h2>
</xsl:when>
<xsl:otherwise>
<h2>dooooooooooooo</h2>
</xsl:otherwise>
</xsl:choose>
Também pode usar várias marcas <xsl:when>
para expressar os padrões If .. Else If
ou Switch
como ilustrado em baixo:
<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>
O exemplo anterior seria equivalente ao pseudocódigo abaixo:
if ($CreatedDate > $IDAppendedDate)
{
output: <h2>mooooooooooooo</h2>
}
else if ($CreatedDate = $IDAppendedDate)
{
output: <h2>booooooooooooo</h2>
}
else
{
output: <h2>dooooooooooooo</h2>
}
55
Author: InfantPro'Aravind', 2016-12-11 19:06:51
Se eu puder oferecer algumas sugestões (dois anos mais tarde, mas esperançosamente útil aos leitores futuros):
- eliminar o elemento comum
h2
. - Factor para fora o texto comum
ooooooooooooo
. - esteja ciente da nova construção do XPath 2. 0
if/then/else
se usar o XSLT 2. 0.
XSLT 1, 0 solução (também funciona com o XSLT 2.0)
<h2>
<xsl:choose>
<xsl:when test="$CreatedDate > $IDAppendedDate">m</xsl:when>
<xsl:otherwise>d</xsl:otherwise>
</xsl:choose>
ooooooooooooo
</h2>
XSLT 2, 0 Solução
<h2>
<xsl:value-of select="if ($CreatedDate > $IDAppendedDate) then 'm' else 'd'"/>
ooooooooooooo
</h2>
30
Author: kjhughes, 2014-10-21 16:19:12
A abordagem mais directa é fazer um segundo teste if, mas com a condição invertida. Esta técnica é mais Curta, mais fácil nos olhos e mais fácil de acertar do que um bloco aninhado:
<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>
Aqui está um exemplo real da técnica que está sendo usada na folha de estilo para um site do governo: http://w1.weather.gov/xml/current_obs/latest_ob.xsl
2
Author: Raymond Hettinger, 2015-03-14 03:23:39