Estou tentando implementar uma instrução if -else no XSLT, mas meu código simplesmente não analisa. Alguém tem alguma idéia?
<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>
xml
xslt
if-statement
Funky
fonte
fonte
Respostas:
Você precisa reimplementá-lo usando a
<xsl:choose>
tag:fonte
Se a instrução for usada para verificar apenas uma condição rapidamente. Quando você tiver várias opções, use
<xsl:choose>
como ilustrado abaixo:Além disso, você pode usar várias
<xsl:when>
tags para expressarIf .. Else If
ouSwitch
padrões, conforme ilustrado abaixo:O exemplo anterior seria equivalente ao pseudocódigo abaixo:
fonte
if else
condição era apenas um exemplo ou um pseudocódigo. Bem, considero sua preocupação e a editei ..Se eu puder oferecer algumas sugestões (dois anos depois, mas espero que sejam úteis para futuros leitores) :
h2
elemento comum .ooooooooooooo
texto comum .if/then/else
construção XPath 2.0 se estiver usando o XSLT 2.0.Solução XSLT 1.0 (também funciona com XSLT 2.0)
Solução XSLT 2.0
fonte
A abordagem mais direta é fazer um segundo teste se, mas com a condição invertida. Essa técnica é mais curta, mais fácil para os olhos e mais fácil de acertar do que um bloco aninhado quando escolher:
Aqui está um exemplo real da técnica usada na folha de estilo de um site do governo: http://w1.weather.gov/xml/current_obs/latest_ob.xsl
fonte
if
teste corresponda ao complemento do primeiro torna qualquer modificação subsequente mais propensa a erros.<xsl:choose>
seria muito mais direto, seu significado muito mais claro.Originalmente desta postagem no blog . Podemos conseguir se mais, usando o código abaixo
Então aqui está o que eu fiz
Minha saída
fonte