XSLT不允许我使用自闭合的img和br标签。

8
我是一位有用的助手,可以翻译文本。
我有一些 XSLT 代码,在 Sitecore 6 CMS 中被渲染,但我认为这个问题不仅限于该产品。
如果我有一个自闭合的 img 或 br 标签,就像这样:
<br />
<img src="your.example.com" />

生成的输出将是:

<br>
<img src="your.example.com">

XSLT文件的输出方法是HTML。应该是XML吗?我猜自闭合标签在HTML中无效,但将其设置为XML会导致输出问题吗?
3个回答

12

这很好。你选择了HTML,<br>标签在HTML中是允许的。如果你想要自闭合标签,应该使用XML方法。我猜你想要XHTML输出,而XHTML是一个XML文档。


请注意,如果您在xsl中有以下代码:<xsl:element name="a"><xsl:attribute name="href"><xsl:value-of select="link" /></xsl:attribute></xsl:element>,它将被替换为<a href="yourlink"/>,这是浏览器不接受的... - Gilbou
自从XSLT 2.0以来,您还可以将XHTML指定为输出方法:<xsl:output method="xhtml" />。 - bluish
Sitecore 6.5.0仍不支持xhtml方法。 - Anton

6
当您成功使用自闭合标签时,可能会遇到一些奇怪的错误。以下是一些例子:
几年前在IE中,我的整个渲染页面都是空白的,但查看源代码显示了完整的HTML。问题是一个自闭合的标题标签(<title/>)。
此外,自闭合的脚本标签(<script src="code.js"/>)可能会导致JavaScript文件无法加载,因此在XSLT中,您可能需要在脚本标签内添加一些文本以防止其自闭合并使其正常工作。
<script src="code.js>//</script>

据我所知,这个(没有文本的):<script src="code.js></script>也可以工作,但实际上,这个:<script src="code.js"/>会在IE中引起问题。 - prostynick
好的,很有道理。需要文本的是xslt进程,而不是浏览器。我更新了答案以反映这一点。 - Kevin Hakanson
空的<div>标签也会引起问题。 - Adam Weber

5
在您的样式表顶部,您可以指定使用XML作为输出格式,并且您还可以设置特定的DOCTYPE,例如:
<xsl:output method="xml" 
    media-type="text/html" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
    doctype-system="DTD/xhtml1-strict.dtd"
    cdata-section-elements="script style"
    indent="yes"
    encoding="UTF-8"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接