Richie

Sometimes at night when I look up at the stars, and see the whole sky just laid out there, don't you think I ain't remembering it all. I still got dreams like anybody else, and ever so often, I am thinking about how things might of been. And then, all of a sudden, I'm forty, fifty, sixty years old, you know?

start tag, end tag issues in IE7, particularly in xslt transformation

    IE7对html标签的关闭很敏感,例如下面这段代码可以正常工作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  
<head>
    
<title></title>
  
</head>
  
<body>
  a
  
<br />
  b
  
<br />
  c
  
</body>
</html>
    但如果你象下面一样在head标签里添加一个script文件的引用,IE7就罢工了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  
<head>
    
<title></title>
    
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
  </head>
  
<body>
  a
  
<br />
  b
  
<br />
  c
  
</body>
</html>
    因为script标签没有关闭,IE7无法显示后面的所有内容,不管html使用strict还是compliant模式都一样。一般情况下,如果你发现html的全部或部分内容在IE7下面无法显示出来,而FF、Opera工作正常,则需要检查html标签的关闭情况了。
    如果使用Visual Studio开发一般不会有这个问题,因为VS将自动、正确的为你的输出标签进行关闭。如果使用其它工具开发html,你需要时刻注意标签的正确关闭。
    现在有另一个麻烦的情况,那就是使用xslt转换生成html。例如下面的xslt代码
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl
="http://www.w3.org/1999/XSL/Transform">
<xsl:output
              
method="html"
              encoding
="utf-8"
              doctype-public
="-//W3C//DTD XHTML 1.0 Transitional//EN"
              doctype-system
="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
<xsl:template match="/">
  
<html xmlns="http://www.w3.org/1999/xhtml">
    
<head>
      
<title></title>
      
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"></script>
    
</head>
    
<body>
    
</body>
  
</html>
</xsl:template>
</xsl:stylesheet> 
    经过xslt转换之后生成的html如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  
<head>
    
<title></title>
    
<script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js" />
  </head>
 
<body>
 
</body>
</html>
    可以看到,虽然你在xslt中将script标签按照W3C规范正确关闭了,但是xslt处理器在生成html时,自动将这个关闭改写成IE7无法识别的方式,导致整个html文档在IE7下面出现空白。这就是IE7、xslt处理器和W3C标准之间的不和谐。xslt处理器的原则是,只要标签里面没有内容,在输出中,它就不会单独生成一个关闭标签,而是针对原标签上使用/>来进行关闭。
    对于这个问题,在xslt中没有什么优雅的方式可以针对IE7进行修正,只能够象下面这样处理
<xsl:text disable-output-escaping="yes">
  
&lt;script language="javascript" type="text/javascript" src="./../../Scripts/jquery-latest.js"&gt;&lt;/script&gt;
</xsl:text>
    通过xsl:text,指定disable-output-escaping属性,禁止xslt对这段文本进行转义,从而达到目的。
    这段时间比较倒霉,什么事情都被撞见了。

posted on 2007-06-20 17:45  riccc  阅读(864)  评论(2编辑  收藏  举报

导航