Chrome,Firefox和Safari没有应用XSLT? IE确实如此!

时间:2010-11-22 08:50:42

标签: firefox google-chrome xslt safari

以下内容将返回浏览器:

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

Chrome 7和FF 5不应用仅显示XML值的XSLT。 IE确实应用了显示结果XHTML的XSLT。

XSLT文件存在且有效 - 我可以在本地处理XML并在Chrome和Firefox中打开生成的XHTML ...

Web服务器是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 个答案:

答案 0 :(得分:4)

在这种情况下,您需要确保为您的网页提供正确的HTTP Content-Type 标头值: text / xml ,使用标头函数可以在PHP中使用:

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

*感谢meder带领我朝着正确的方向前进。

同样在Chrome和Safari中,由于上述doctype-public值,在应用XSLT时仍会出现错误:

<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"/>

如果未根据spec指定doctype-system,则甚至不应查看doctype-public属性。

*感谢LarsH指出doctype-system应该是一个单独的值。

答案 1 :(得分:1)

关于 doctype-public 属性:根据spec

  

doctype-public属性应该是   除非doctype-system被忽略   属性已指定。

所以关于你的<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中的公共和系统标识符的更多信息,请参阅here

显然,这不是Fx和Chrome无法使用XSLT呈现您的XML的原因(内容类型是原因),但这可能是您想要解决的问题。