代码之家  ›  专栏  ›  技术社区  ›  markmnl

Chrome、Firefox和Safari不应用XSLT?是的!

  •  2
  • markmnl  · 技术社区  · 13 年前

    以下内容将返回到浏览器:

        <?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服务器是IIS6,接口是PHP5.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 回复  |  直到 13 年前
        1
  •  4
  •   markmnl    13 年前

    您需要确保页面使用正确的HTTP 内容类型 本例中的头值: 文本/xml ,可以在PHP中使用header函数:

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

    *多亏了梅德,他把我引向了正确的方向。

    阿尔索 在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 .

    *感谢LarsH指出doctype系统应该在单独的值中。

        2
  •  1
  •   LarsH    13 年前

    关于 doctype公用 属性:根据 spec ,

    doctype public属性应该是 忽略,除非doctype系统 属性已指定。

    所以你的 <xsl:output-method> 元素,该元素具有doctype public属性,但没有doctype系统。(这并不能成为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" />
    

    here 有关XML中的公共和系统标识符的详细信息。

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