以下内容将返回浏览器:
<?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>
答案 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的原因(内容类型是原因),但这可能是您想要解决的问题。