首页 文章

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

提问于
浏览
2

以下内容返回浏览器:

<?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,如果它有任何东西吗?

UPDATE: 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

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

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

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

    Also 在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

    关于 doctype-public 属性:根据spec

    除非指定了doctype-system属性,否则应忽略doctype-public属性 .

    所以对于你的 <xsl:output-method> 元素来说非常可疑,它有一个doctype-public属性但没有doctype-system . (这不能成为Chrome和Safari从"falling over" ... =崩溃的借口吗?)

    也许你想要

    <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的原因(内容类型是原因),但这可能是您想要解决的问题 .

相关问题