Chrome, Firefox и Safari не используют XSLT? IE делает! - PullRequest
2 голосов
/ 22 ноября 2010

В браузер возвращается следующее:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="to_xhtml.xslt"?>
    <root>
      <value>test data</value>
    </root>

Chrome 7 и FF 5 не применяют XSLT, показывая только значения XML. IE применяет XSLT, показывая результирующий XHTML.

Файл XSLT существует и является действительным - я могу обработать XML локально и открыть получившийся XHTML в Chrome и Firefox ...

Веб-сервер - IIS 6, а интерфейс - PHP 5.3, если это имеет отношение к этому?

ОБНОВЛЕНИЕ: XSLT:

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

  <xsl:output 
    method='xml' 
    indent='yes'
    doctype-public='"-//W3C//DTD XHTML Basic 1.1//EN"
    "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'/>

  <xsl:template match="/root">
    <html>
      <head>
        <title>
        </title>
      </head>
      <body>
        <p>
            <xsl:value-of select="value"/>
        </p>
    ...
  </html>

Ответы [ 2 ]

4 голосов
/ 22 ноября 2010

Вы должны убедиться, что ваша страница обслуживается с правильным HTTP Content-Type значение заголовка в этом случае: text / xml , возможно в PHP с использованием функции заголовка:

header('Content-type: text/xml');
echo $xmlStr;

* спасибо медеру, который привел меня в правильном направлении для этого.

Также В Chrome и Safari по-прежнему возникает ошибка при применении XSLT из-за вышеуказанного общедоступного значения doctype:

<xsl:output 
method='xml' 
indent='yes'
doctype-public='"-//W3C//DTD XHTML Basic 1.1//EN"
"http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"'/>;

Должно быть:

<xsl:output 
  method="xml"
  indent="yes"
  doctype-public="-//W3C//DTD XHTML Basic 1.1//EN"
  doctype-system="http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"/>

Атрибут doctype-public даже не следует просматривать, если doctype-system не указана в соответствии с spec .

* спасибо LarsH за указание на doctype-систему, которая должна быть в отдельном значении.

1 голос
/ 22 ноября 2010

Относительно атрибута doctype-public : Согласно spec ,

Атрибут doctype-public должен быть игнорируется, если только система doctype атрибут указан.

Итак, что-то довольно подозрительно в вашем элементе <xsl:output-method>, который имеет атрибут doctype-public, но не имеет doctype-system. (Это не освобождает Chrome и Safari от "падения" ... = сбой?)

Может быть, вы хотели

<xsl:output 
  method="xml"
  indent="yes"
  doctype-public="-//W3C//DTD XHTML Basic 1.1//EN"
  doctype-system="http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd" />

См. здесь , чтобы узнать больше о публичных и системных идентификаторах в XML.

Очевидно, это не причина, по которой Fx и Chrome не отображали ваш XML с использованием XSLT (причиной был тип содержимого), но вы, вероятно, захотите это исправить.

...