Criação de comentários condicionais com XSLT?
-
03-07-2019 - |
Pergunta
Eu quero criar comentários condicionais em XSLT.
Mas quando eu uso isso:
<!-- [If IE7] [endif] -->
numa <xsl:comment>
, XSLT remove da saída quando ele é processado.
Existe alguma maneira de criar comentários condicionais em XSLT?
Solução
Basta usar um tag <xsl:comment>
e incluir o seu comentário dentro da tag.
Por exemplo:
<xsl:if test="@id = '1'">
<xsl:comment>
<![CDATA[[if IE]><![endif]]]>
</xsl:comment>
</xsl:if>
Domar Seu Multiple IE Standalones é um grande artigo sobre este assunto.
Outras dicas
A solução acima assume que o conteúdo dentro do comentário condicional não contém quaisquer parâmetros XSLT. No exemplo abaixo, nós estamos tendo um $DATA_ROOT_PATH
parâmetro que deve ser processado para nos dar a localização correta de um arquivo CSS. Neste caso <xsl:comment/>
não é adequado. Devemos usar <xsl:text/>
e desativar a saída de escape.
O exemplo aqui vai incluir o arquivo CSS somente se estamos usando IE7.
<xsl:text disable-output-escaping="yes"><!--[if IE 7]></xsl:text>
<link rel="stylesheet" type="text/css" href="{$DATA_ROOT_PATH}/resources/css/ie7.css" media="screen"/>
<xsl:text disable-output-escaping="yes"><![endif]--></xsl:text>
O exemplo de código iria gerar uma saída como então se $DATA_ROOT_PATH
= / example :
<!--[if IE 7]>
<link rel="stylesheet" type="text/css"
href="/example/resources/css/ie7.css"
media="screen" />
<![endif]-->
Esta foi a única maneira que eu era capaz de conseguir meu exemplo de estilo a serem aplicados:
<xsl:comment>[if IE]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]</xsl:comment>
Eu tinha que ter certeza que não há espaço entre o meu texto e o xsl: abertura comentário / fechando as tags