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?

Foi útil?

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">&lt;!--[if IE 7]&gt;</xsl:text>
  <link rel="stylesheet" type="text/css" href="{$DATA_ROOT_PATH}/resources/css/ie7.css" media="screen"/>
<xsl:text disable-output-escaping="yes">&lt;![endif]--&gt;</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]>
      &lt;link rel="stylesheet" type="text/css" href="ie.css" />
      &lt;![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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top