我想用一个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
答案 0 :(得分:1)
我认为您需要将xsl:output
与xsl: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:output
和xsl: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的“\!”)。