0

以下の構造の何が問題なのですか? 以前の Internet Explorer (5.5/6/7/8) では、ブラウザーが無限ループを開始し、何もレンダリングされませんか?

タグにプレフィックスがあることがわかるように、p私のプロジェクトにとって重要です。body 要素のコンテンツはサーバー側言語で挿入する必要があります。各HTMLフラグメントは異なるユーザーから送信される可能性があります。実際、一部のフラグメントには同じID名またはcss *クラス* 名なので、XMLNS を使用して各フラグメントを区別しています...

index.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>
4

1 に答える 1

0

問題は一番上の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>

出力から xml-stylesheet PI を削除するために、これを XSLT に追加することもお勧めします。

<xsl:template match="processing-instruction('xml-stylesheet')" />
于 2013-06-29T07:27:09.540 に答える