xslt中的w3c验证错误

时间:2012-09-04 13:41:42

标签: html xslt

我的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“&GT;

请帮帮我。

1 个答案:

答案 0 :(得分:0)

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

<xsl:output method="html" />

根据W3C网站:

  

html输出方法不应输出空的结束标记   元素。对于HTML 4.0,空元素是area,base,basefont,   br,col,框架,hr,img,输入,isindex,链接,元和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>