火狐3不应用我的XSLT样式表,但其他浏览器可以。

10
我试图从Web服务器提供动态生成的XML页面,并从同一Web服务器提供自定义静态XSLT,以便将处理卸载到客户端Web浏览器中。
直到最近,在Firefox 2、3、IE5、6和Chrome中都可以正常工作。但最近,Firefox 3似乎发生了一些变化,现在仅显示源代码中的文本元素。
页面源代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Firefox 2.0 and Internet Explorer 7 use simplistic feed sniffing to override desired presentation behavior for this feed, and thus we are obliged to insert this comment, a bit of a waste of bandwidth, unfortunately. This should ensure that the following stylesheet processing instruction is honored by these new browser versions. For some more background you might want to visit the following bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=338621 -->
<?xml-stylesheet type="text/xsl" href="/WebObjects/SantaPreview.woa/Contents/WebServerResources/Root.xsl"?>
<wrapper xmlns="http://www.bbc.co.uk/ContentInterface/Content" xmlns:cont="http://www.bbc.co.uk/ContentInterface/Content" sceneId="T2a_INDEX" serviceName="DSat_T2">
    ....

Firebug显示Root.xsl文件正在被加载,并且它的响应头包含以下行:

Content-Type    text/xml

我已经尝试将Content-Type设置为application/xml,但没有任何区别 :-(

Web开发者扩展程序也显示了正确的生成源代码,如果您保存并在Firefox中加载该页面,则会正确显示。

显示问题的Firefox版本为3.0.3

有什么想法我可能做错了什么?

5个回答

6

只显示文本元素是在空的XSL样式表中所得到的行为。

对我来说,这意味着您的xpath表达式存在问题,xsl:template/@match属性与源文档不匹配。

您没有提供足够的信息来进一步诊断,因此这个猜测是我能提供的全部。

编辑:事实证明,问题在于IE和Chrome会默默地接受一个节点集作为string-length的参数,而FF3则不会。请注意,规范规定了一个可选的字符串参数,并且没有指定使用节点集参数的行为。


我会仔细查看并进行双重检查。不过,无论是IE还是Chrome似乎都能正确进行转换,而Firefox中的Web Developer扩展程序显示的HTML看起来对于生成的源代码是有效的。生成的源代码窗口有多准确?它是否显示用于渲染的确切源代码? - Bill Michell
另外,在XSLT文件名中不要使用下划线。我曾经这样做过,但当我将文件名改为没有下划线的名称时,在Firefox中它可以正常工作。 - Prof. Falken

4
如果您正在使用NoScript,它会禁用XSL样式表,直到您“允许<site>”。

这对我来说就是这样了。我从来没有想过NoScript会禁用XSL样式表的加载,更不用说处理它了,但在我将网站列入白名单之前,FireFox甚至没有为XSL样式表执行HTTP请求。一旦我将网站列入白名单,页面自动重新加载,并请求和使用样式表。 - Eddie
我现在感觉很愚蠢,但这正是我的问题所在。我知道在SO上“谢谢”评论通常不受欢迎,但还是要说一声“谢谢”。 - Ainar-G

3

我在此记录一下 - 我遇到了同样的症状,也是Firefox 3。但是在我的情况下,问题出在另一个地方:

当XSL文件名中有下划线_时,Firefox似乎真的非常不喜欢。我的XSLT文件名类似于my_super_nice_xslt_which_loads_in_opera_and_ie.xsl

因此,大家不要使用下划线,而是用连字符(减号)代替:my-super-nice-xslt-which-loads-in-opera-and-ie.xsl

这样它也可以在Firefox中加载了。我想我以后会只使用字母和数字的简单名称。你知道那句话,“一朝被蛇咬,十年怕井绳”。(在我的情况下,我被咬了两次,但忘记了第一次,所以这次让我怕了四次。)


3
在后续调查中,我回答了自己的问题。ddaa引导我朝正确的方向前进。
Firefox在xslt转换方面似乎非常挑剔。仔细检查您的xslt,以确保IE和Chrome掩盖的错误没有错误。
XML Spy是一个不便宜但不错的产品,可以突出显示xslt中的一系列错误。它似乎至少能够发现与Firefox渲染器相同数量的问题。
不幸的是,似乎不能依靠Web Developer扩展来解决这个问题。

那么,这确实是一种命名空间匹配问题吗? - ddaa
1
不好意思,我刚刚遇到了一个xpath问题。IE和Chrome上的string-length()函数可以接受节点列表作为参数,但是XML Spy会报错"Too many items"。将表达式进行修改后,Firefox就恢复正常了。 - Bill Michell
有没有办法从Firefox获取错误消息?我有同样的问题,XML Spy没有抱怨。8-/ - Hans-Peter Störr

0

尝试将其作为application/xml而不是text/xml提供


有时它对其他浏览器有效,所以猜测也不错。 - Prof. Falken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接