Поведение браузера с XSL - Firefox отличается от IE / Chrome - PullRequest
0 голосов
/ 05 октября 2010

У меня есть следующая простая таблица стилей XSL:

<?xml version="1.0" encoding="windows-1252"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns="http://www.w3.org/1999/xhtml" version="1.0">
  <xsl:output encoding="utf-8" method="html" />

  <xsl:template match="/">

    <xsl:text disable-output-escaping="yes">
    &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
      </xsl:text>
    <html>
      <head><title>hello world</title></head>
      <body>
        <p>hello world</p>
        </body>
      </html>
    </xsl:template>

  </xsl:stylesheet>

Когда я использую его, Internet Explorer 7 и Safari 5.0.2 просто отображают «привет мир», как и ожидалось. Однако Firefox 3.6.10 отображает что-то другое:

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

hello world

Я предполагаю, что Firefox буквально воспринимает первую команду xsl: text, а IE и Safari рассматривают ее как часть страницы. IE и Safari правильно отображают это или Firefox?

(я делаю xsl: text, чтобы библиотека MSXML выводила правильные теги для соответствия HTML5.)

1 Ответ

1 голос
/ 05 октября 2010

Для вывода объявления DOCTYPE для стандартного режима рендеринга в современном браузере не требуется.Только IE имеет некоторые проблемы: он рендерит в стандартном режиме, но теряет новые функции движка CSS (например, откат IE7 к IE6).

Объявление xsl:output - лучший инструмент, но в некоторых версиях Opera есть некоторые проблемыс fn:document при использовании выходного объявления с идентификаторами PUBLIC и SYSTEM.Я должен протестировать поведение Opera 10.X, так как Opera 9.X имеет очень низкую долю рынка.

Единственный обходной путь - вывести объявление DOCTYPE, как вы это делали (текст DOE), но только для IE: вы можететест для xsl:vendor с функцией system-property.

...