Создание условных комментариев с помощью XSLT?

Я хочу создать условные комментарии в XSLT.

Но когда я использую это:

<!-- [If IE7] [endif] -->

в <xsl:comment> XSLT удаляет его из вывода при рендеринге.

Есть ли способ создавать условные комментарии в XSLT?


person Wasim Shaikh    schedule 02.05.2009    source источник


Ответы (3)


Просто используйте тег <xsl:comment> и включите свой комментарий в тег.

Например:

<xsl:if test="@id = '1'">
  <xsl:comment>
    <![CDATA[[if IE]><![endif]]]>
  </xsl:comment>
</xsl:if>

Укрощение нескольких автономных IE — отличная статья на эту тему.

person Cerebrus    schedule 02.05.2009
comment
Да.. Это работает :) Почему вы использовали первую строку кода? ‹xsl:if test=@id='a'› - person Wasim Shaikh; 02.05.2009
comment
‹xsl:if› ? Я думал, что вам нужно, чтобы комментарий был включен условно! Где мой голос/принятие?! ;-) - person Cerebrus; 02.05.2009
comment
Добавлено голосование. ;-) Условный комментарий включается безоговорочно. Но IE оценивает комментарий как условный — если он оценивается как true, код внутри выполняется. - person Tomalak; 02.05.2009
comment
Как получить динамические значения внутри комментариев - person Susheel Singh; 08.10.2013

Приведенное выше решение предполагает, что содержимое условного комментария не содержит параметров XSLT. В приведенном ниже примере у нас есть параметр $DATA_ROOT_PATH, который нужно обработать, чтобы получить правильное расположение файла CSS. В данном случае <xsl:comment/> не подходит. Мы должны использовать <xsl:text/> и отключить экранирование вывода.

Пример здесь будет включать файл CSS, только если мы используем 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>

Пример кода будет генерировать вывод следующим образом, если $DATA_ROOT_PATH = /example:

<!--[if IE 7]>
  <link rel="stylesheet" type="text/css"
        href="/example/resources/css/ie7.css"
        media="screen" />
<![endif]-->
person Erik Töyrä Silfverswärd    schedule 07.10.2010
comment
Вы написали, что ‹xsl:comment/› не подходит, но это соответствует w3.org/TR/xslt#section-Creating-Comments : <!-- Category: instruction --> <xsl:comment> <!-- Content: template --> </xsl:comment> Это означает, что вы можете использовать любой шаблон контента внутри инструкции xsl:comment, если он ничего не выводит. кроме текстовых узлов. - person ; 16.04.2011
comment
Это вполне допустимый сценарий, когда вам нужно дополнительно обработать содержимое условного комментария. Однако есть опечатка с закрывающим тегом: после endif есть два дополнительных символа ]]. Правильно надо сказать: <xsl:text disable-output-escaping="yes">&lt;![endif]--&gt;</xsl:text> - person aron.lakatos; 31.10.2016

Это был единственный способ применить мою таблицу стилей ie:

    <xsl:comment>[if IE]>
      &lt;link rel="stylesheet" type="text/css" href="ie.css" />
      &lt;![endif]</xsl:comment>

Я должен был убедиться, что между моим текстом и открывающими/закрывающими тегами xsl:comment нет пробела.

person CaptainJanuary    schedule 11.09.2013