вы можете ветвиться в xslt в зависимости от формата вывода? - PullRequest
0 голосов
/ 21 февраля 2011

Я создаю сценарий xlst, и мне было интересно, возможно ли разветвлять некоторый код в зависимости от формата вывода?

Вверху моего файла xlst у меня есть это:

<xsl:output 
 version="4.0" 
 method="html" 
 indent="no" 
 encoding="UTF-8" 
 use-character-maps="spaces"/>

Итак, я полагаю, что-то есть, чтобы запросить какую-то глобальную информацию, чтобы сделать это:

<xsl:if test='global_output is html'>
      do this
</xsl:if>

Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Если вы хотите создать варианты таблицы стилей для использования в различных ситуациях, не помещайте код if / then / else внутри правил шаблона для проверки условия во время выполнения. Таким образом, вы получите спагетти. Создайте два модуля таблиц стилей to-html.xsl и to-xml.xsl, и оба импортируют модуль common.xsl, который содержит общий код. Модуль common.xsl может перезвонить импортирующему модулю, когда ему нужно вызвать функциональность, которая варьируется между двумя случаями. Одним из различий между этими двумя случаями, конечно же, является само объявление xsl: output.

0 голосов
/ 21 февраля 2011

В 1.0 можно использовать:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output version="4.0"
    method="html" indent="no" encoding="UTF-8"/>
    <xsl:template match="/*">
        <xsl:if test="document('')/*/xsl:output/@method = 'html'">
            Output method is HTML
        </xsl:if>
        <xsl:if test="document('')/*/xsl:output/@method = 'xml'">
            Output method is XML
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Может быть, в XSLT 2.0 есть более классный способ сделать это.

...