如何在单个xslt文件

时间:2015-07-01 11:10:06

标签: html xml conditional xslt-2.0

我想用一个XSL来生成多种输出格式(现在是xml和html)

我想通过样式表定义哪种输出格式

所以我的代码如下:                       

    <xd:doc scope="stylesheet">
        <xd:desc>
            <xd:p><xd:b>Created on:</xd:b> July 1, 2015</xd:p>
            <xd:p><xd:b>Author:</xd:b> me</xd:p>
            <xd:p>A stylesheet to test the application of XYZABC</xd:p>
            <xd:p>takes a single parameter - xslt_output_format</xd:p>
            <xd:p>valid inputs - xml html</xd:p>
        </xd:desc>
    </xd:doc>

    <xsl:output name="xml_out" encoding="UTF-8" indent="yes" method="xml" />
    <xsl:output name="html_out" encoding="ISO-8859-1" indent="yes" method="html"/>
    <xsl:template match="/">
        <xsl:choose>
            <xsl:when test="$xslt_output_format = 'xml'">
                <data>
                    <p>This is some test xml output</p>
                </data>
            </xsl:when>
            <xsl:when test="$xslt_output_format = 'html'">
                <html>
                    <head>
                        <title>HTML Test Output</title>
                    </head>
                    <body>
                        <p>This is some test html output</p>                        
                    </body>
                </html>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

如果我传递'xml'作为我得到的参数                   

这是一些测试xml输出

    

如果我通过'html',我会得到                                            HTML测试输出                               

这是一些测试html输出

             

这似乎并不尊重我对html上的ISO-8859-1编码的尊重(我刚用它来测试它是否有效)

Michael Kay的 XSLT 2.0和Xpath 2.0 tome有点模糊,绝对缺乏使用多个语句的例子(对不起Mike)

所以我只是问我是否正确使用它?

我可以实现我的目标吗? TIA Feargal

2 个答案:

答案 0 :(得分:1)

我认为您需要将xsl:outputxsl:result-document http://www.w3.org/TR/xslt20/#creating-result-trees一起使用,因此请尝试

<xsl:template match="/">
    <xsl:choose>
        <xsl:when test="$xslt_output_format = 'xml'">
          <xsl:result-document format="xml_out" href="output.xml">
            <data>
                <p>This is some test xml output</p>
            </data>
          </xsl:result-document>
        </xsl:when>
        <xsl:when test="$xslt_output_format = 'html'">
          <xsl:result-document format="html_out" href="output.html">
            <html>
                <head>
                    <title>HTML Test Output</title>
                </head>
                <body>
                    <p>This is some test html output</p>                        
                </body>
            </html>
          </xsl:result-document>
        </xsl:when>
    </xsl:choose>
</xsl:template>

我可能会使用模板和模式来区分两种不同的处理方式,但使用xsl:outputxsl:result-document的建议仍然相同。

答案 1 :(得分:0)

xsl:output本身不允许您对输出方法进行任何运行时选择。

在2.0中,你可以将xsl:output与xsl:result-document结合使用:xsl:result-document可以选择一个名为xsl:output的声明,或者它可以有选择地覆盖它的一些属性。

另一个选项(在1.0中也可用)是覆盖调用API的xsl:output:如果你正在使用JAXP,请查看Transformer.setOutputProperty()。

在Saxon命令行上,您可以使用命令行中的语法设置输出属性!indent = yes(“!”需要带有一些shell的“\!”)。