开发者

can you branch in xslt depending on output format?

I'm crea开发者_StackOverflow社区ting an xlst script and was wondering if it is possible to branch some code depending on the output format?

On top of my xlst file I have this:

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

So I suppose there is something out there to inquire some sort of global to do this:

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

Thank you!


If you want to create variants of a stylesheet for use in different situations, don't put if/then/else code inside the template rules to test the condition at run-time. That way you end up with spaghetti. Create two stylesheet modules to-html.xsl and to-xml.xsl, and have both import a module common.xsl that contains the shared code. The common.xsl module can call back to the importing module when it needs to invoke functionality that varies between the two cases. One of the differences between the two cases is of course the xsl:output declaration itself.


In 1.0 one can use:

<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>

May be there is a classier way to do it in XSLT 2.0.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜