我的XHTML文件在早期的Internet Explorer中有什么问题,无限循环,没有呈现任何内容?

What's wrong with my XHTML file in earliers internet explorer, infinite loop, nothing is rendered?

提问人:kapsula 提问时间:6/28/2013 最后编辑:pnutskapsula 更新时间:11/17/2015 访问量:131

问:

下面的结构有什么问题,在早期的 Internet Explorer (5.5/6/7/8) 中,浏览器启动无限循环,什么都没有呈现?

正如你所看到的,标签有一个前缀,这对我的项目很重要,body元素的内容必须用服务器端语言插入,每个HTML片段都可以从不同的用户发送,事实上,一些片段可以包含相同的id名称或css *class*名称,所以这就是为什么我使用XMLNS来区分每个片段......p

索引.php

<?php header('Content-type: application/xml'); ?>
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xslt.xsl"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:aa="zz" xmlns:ee="rr">
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
    <style type="text/css">
            p{background: #0000ff;}
        aa\:p{background: #00ff00;}
    </style>
</head>
<body>
    <aa:p>aaa</aa:p>
    <ee:p>aaa</ee:p>
</body>
</html>

xslt.xsl

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="*">
      <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@* | node()"/>
      </xsl:element>
    </xsl:template>

    <xsl:template match="@* | comment() | text() | processing-instruction()">
      <xsl:copy/>
    </xsl:template>

</xsl:stylesheet>
Internet Explorer xslt xhtml xml 命名空间

评论

0赞 Mr. Llama 6/28/2013
为什么这个被标记?php
0赞 kapsula 6/28/2013
对不起:)因为 PHP 文件提供标头 content-type,也许这就是导致问题的原因......

答:

0赞 JLRishe 6/29/2013 #1

我认为问题出在顶部的 DTD:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

可能发生的情况是,IE 的 XSLT 处理器正在搜索此 DTD 定义,然后以某种方式挂起。

如果您将其从 PHP 文件中删除并将其添加到 XSLT 中,它似乎可以工作,事实上,这是在 XSLT 的输出中实际拥有 DTD 的唯一方法:

<xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
              doctype-system=" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

  <!-- ... -->

</xsl:stylesheet>

我还建议将其添加到您的 XSLT 中,以从输出中剥离 xml-stylesheet PI:

<xsl:template match="processing-instruction('xml-stylesheet')" />