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

Chrome、Firefox和Safari没有应用XSLT?是的!,firefox,google-chrome,xslt,safari,Firefox,Google Chrome,Xslt,Safari,以下内容将返回到浏览器: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="to_xhtml.xslt"?> <root> <value>test data</value> </root> 测试数据 Chrome7和FF5不应用XSLT,只显示XML值。IE确实应用了显示结果XHTML的XSLT XSLT

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

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

测试数据
Chrome7和FF5不应用XSLT,只显示XML值。IE确实应用了显示结果XHTML的XSLT

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

web服务器是IIS 6,接口是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>

...
您需要确保为页面提供正确的HTTP内容类型标题值,在这种情况下:text/xml,在PHP中可以使用标题函数:

header('Content-type: text/xml');
echo $xmlStr;
*多亏了梅德尔,他为我指引了正确的方向

另外在Chrome和Safari中,由于上述doctype公共值,应用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"/>

如果doctype系统未根据指定的属性指定,则甚至不应查看doctype public属性


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

关于doctype public属性:根据

doctype public属性应为 除非doctype系统 属性被指定

因此,您的
元素有一些可疑之处,它有一个doctype公共属性,但没有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" />

有关XML中的公共和系统标识符的更多信息,请参阅


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

1。初始文件的内容类型是什么?2.显示xslt。@meder 1。php返回的默认值:text/html(来自Live HTTP头),我猜应该是text/xml?2.上面XSLT的顶部。您是否尝试过
method='html'
有用的答案,+1。另请参阅我关于修改doctype-public值的回答。Fx和Chrome未呈现的原因是内容类型,此外(在修改内容类型后),Chrome和Safari将崩溃(停止应用XSLT并显示错误消息,显示迄今为止生成的XHTML-在本例中为零)应用XSLT是因为我的第一个doctype公共值,颠倒撇号和引号解决了这个错误。但是,正如您所指出的,我应该将doctype系统与doctype公共值分开-谢谢!我会更新我的答案。