0

我的 xsl 文件是这样的:

<img> 
     <xsl:attribute name="id">poster_<xsl:value-of select="position()"/></xsl:attribute>      
     <xsl:attribute name="alt"><xsl:value-of select="movie-title"/></xsl:attribute>     
     <xsl:attribute name="src"><xsl:value-of select="../poster-verylarge-image"/><xsl:value-of    select="movie-photo-name"/></xsl:attribute> 
</img>

我收到一个 W3C 错误:

第 508 行,第 234 列:省略了“img”的结束标签,但指定了 OMITTAG NO
...artini.com/user_uploads/moviereview/420_265/7876579_1342029293_79940.jpeg">

请帮帮我。

4

1 回答 1

0

虽然您没有显示完整的 XSLT 或输出 HTML,但我怀疑在您的 XSLT 文档中您已指定输出为 HTML

<xsl:output method="html" />

根据W3C网站:

html 输出方法不应为空元素输出结束标记。对于 HTML 4.0,空元素是 area、base、basefont、br、col、frame、hr、img、input、isindex、link、meta 和 param。例如,以样式表形式<br/><br></br>在样式表中编写的元素应输出为<br>.

在您的小样本中,您正在输出一个图像标签,它可能会输出如下:

<img id="img1" src="test.html" alt="test">

如果您使用 W3C 验证器将文档验证为 XHTML,这将失败,因为图像标签未关闭。如果它是 XHTML 文档,则意味着 HTML 还必须符合格式良好的 XML 文档。

有很多方法可以解决这个问题。首先,如果你使用的是XSLT2.0,你可以指定一个xhtml的输出方法,这应该关闭标签

<xsl:output method="xhtml" />

或者,由于 XHTML 应该是格式良好的 XML,您可以只指定 xml 的输出方法。这仍将输出您需要的 HTML,但它也将是格式良好的 XML。

<xsl:output method="xml" />

但是,最好指定输出 html 的 doctype,以便 W3C 验证器确切地知道它正在验证的 HTML 版本。例如:

<xsl:output method="html" 
   doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" 
   doctype-system="http://www.w3.org/TR/html4/loose.dtd" />

执行此操作时,应验证带有非封闭标签的 HTML 文档

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>Test</title></head>
<body><img id="img1" src="test.html" alt="test"></body>
</html>
于 2012-09-05T08:00:50.993 回答