2009-12-15 18 views
8

由于历史的原因,我们有XSL文件包含 - 层次内的xml,html或xhtml在<xsl:output>:哪个更好?

<xsl:output method="xml"> 

<xsl:output method="html"> 

<xsl:output method="xhtml"> 

的混合物。现在我们要重构所有XSL文件使用相同的输出方法。

在我们要产生XHTML输出结束,所以我想后者将是最好的选择。

但什么是这三种输出方式,你会用什么样的解决方案之间的差异?

编辑:我使用XSLT 2.0

回答

4

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

给定一个XHTML 元件,其内容模型不是 EMPTY的一个空的实例(例如,一个空的标题或 段落)串行绝不能使用 最小化形式。也就是说,它必须 输出<p></p>而不是<p />

给定一个XHTML元素,其含量 模型是空的,串行化器必须 使用最小化标签的语法,为 例如<br />,如由XML 允许的替代 语法<br></br>在许多 现有用户代理给出不确定的结果。串行器 必须在尾随之前包括一个空格,例如, <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">

+0

如果您使用的是XSLT 2.0。 – 2009-12-16 17:01:48

3

据我所知,没有method:xhtml在XSLT 1.0 xsl:output指令。

wc3schools同意这一点。

由于XHTML是一种XML方言,这就是我会用什么。

但如果你正在使用xslt 2.0,还不如用xhtml,因为这是你在什么输出。

+0

在XSL 2.0中有。 – 2009-12-15 09:50:57

+0

就这样。固定! – Oded 2009-12-15 09:52:54

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。