<xsl:output>中的xml,html或xhtml:哪个是更好的选择?</xsl:output>

时间:2009-12-15 09:38:46

标签: xml xslt xslt-2.0

由于历史原因,我们混合了

<xsl:output method="xml">

<xsl:output method="html">

<xsl:output method="xhtml">

在XSL文件的包含层次结构中。现在我们想重构所以所有XSL文件都使用相同的输出方法。

最后我们想要生成XHTML输出,所以我认为后者是最好的选择。

但是这三种输出方法之间有什么区别,你会用哪种解决方案?

编辑:我正在使用XSLT 2.0

3 个答案:

答案 0 :(得分:8)

HTML将序列化为HTML,因此输出可能不是格式良好的XML。如果您只是发送到浏览器而不关心能够解析为XML那么这可能对您有用。

XML将序列化为XML,因此输出结构良好,但是使用输出的浏览器可能会遇到一些问题。小事情,例如自我关闭<script /><div />元素。为了避免这个问题,你必须玩游戏,比如在元素中添加注释(例如<script src="someJSFile.js"><!--don't close my script tag --></script>

如果您有一个XSLT 2.0引擎并且想要格式良好的HTML输出而不必担心某些元素如何被序列化,那么请使用XHTML。

答案 1 :(得分:5)

我通过阅读XSLT 2.0规范(XSLT 2.0 and XQuery 1.0 Serialization)找到了答案。

  

给出一个XHTML的空实例   内容模型不是的元素   EMPTY(例如,空标题或   段)序列化器不得使用   最小化的形式。也就是说,它必须   输出<p></p>而非<p />

     

给定一个XHTML元素的内容   model是EMPTY,序列化器必须   使用最小化标记语法   示例<br />,作为替代方案   XML允许的语法<br></br>   许多人给出了不确定的结果   现有用户代理。序列化器   必须在前面加一个空格   尾随/&gt;,例如<br /><hr />   和<img src="karen.jpg" alt="Karen" />

     

序列化器绝不能使用该实体   尽管参考&apos;   在XML中合法,因此在XHTML中,   没有在HTML中定义,也没有   被所有HTML用户代理识别。

     

序列化程序应该输出命名空间   声明的方式是   符合要求   如果可能的话,XHTML DTD。该   XHTML 1.0 DTD需要声明   的xmlns = “http://www.w3.org/1999/xhtml”   出现在html元素上,和   仅限于html元素。该   序列化器必须输出命名空间   与...一致的声明   存在于中的命名空间节点   结果树,但它必须避免   输出冗余命名空间   DTD元素的声明   会使它们无效。

这意味着答案是使用<xsl:output method="xhtml">

答案 2 :(得分:3)

据我所知,xslt 1.0中的method:xhtml指令没有xsl:output

wc3schools同意这一点。

由于XHTML是一种XML方言,所以我会使用它。

如果您使用的是xslt 2.0,请使用xhtml,因为这就是您要输出的内容。