XSLT 样式表不适用于 Firefox 中的 XML。如何解决?

XSLT stylesheet isn't applied to XML in Firefox. How to fix it?

提问人:radunieczek 提问时间:1/3/2021 最后编辑:zx485radunieczek 更新时间:11/18/2023 访问量:5360

问:

我不知道为什么我的代码不与我和我的 xml 合作。我很抱歉提供照片,但是当我提供代码时,网站显示的是最终结果,而不是它自己的代码,我不知道如何更改它。

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="movies.xsl" type="text/xsl" ?>
<collection>
    <movie>
        <title>hasdasd</title>
        <year>1222</year>
        <genre>horror</genre>
    </movie>
    <movie>
        <title>wqw</title>
        <year>1111</year>
        <genre>notporn</genre>
    </movie>
    <movie>
        <title>asdsd</title>
        <year>1444</year>
        <genre>comedy</genre>
    </movie>
</collection>

我的XML代码

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/collection">
      <html>
        <body> <h1>OEIHFWOEFIHEFOI</h1>
        <table border="1">
            <tr>
                <th>title</th>
                <th>Genre</th>
                <th>year</th>
            </tr>
            <xsl:for-each select="movie">
            <tr>
                <td><xsl:value-of select="title" /></td>
                <td><xsl:value-of select="year" /></td>
                <td><xsl:value-of select="genre" /></td>
            </tr>
            </xsl:for-each>
        </table>
        </body>
      </html>
  </xsl:template>
</xsl:stylesheet>

我的 XSLT 代码 我真的不知道怎么了,似乎他们以错误的方式相互联系,但我仍然一无所知。

end result

XML 火狐 XSLT XSLT-1.0

评论

2赞 Martin Honnen 1/3/2021
您使用哪种浏览器,是从文件系统加载 XML 还是通过 HTTP(S) 加载?
0赞 Martin Honnen 1/3/2021
另外,您是否在浏览器控制台 (F12) 中看到任何错误或警告?
0赞 radunieczek 1/3/2021
我只是用 firefox 打开它,在 f12 中它说添加标题,我试图在 html head 中添加一个,但它仍然不起作用
0赞 Martin Honnen 1/3/2021
您是从文件系统还是从 HTTP 服务器加载 XML?
0赞 radunieczek 1/3/2021
从文件系统,zx485 的答案有所帮助,它的工作,仍然感谢

答:

4赞 zx485 1/3/2021 #1

这似乎是一个常见的问题,即较新版本的Firefox对XML-XSLT组合的源应用了更严格的策略。如果 XML 和 XSLT 是本地文件,Firefox 将阻止/忽略对 XSLT 的引用。

解决方案是更改以下设置中的一个设置:about:config

privacy.file_unique_origin

自。正如 @evilpie 所建议的那样,这是首选的修改。false

这应该使你的 XML 按预期显示。这里讨论的是:Firefox 68:本地文件现在被视为跨域 (1558299)。

评论

0赞 evilpie 1/3/2021
你能修改你的答案吗?此解决方案的安全性甚至低于必要的安全性。
4赞 evilpie 1/3/2021 #2

首先:我强烈建议您使用本地http服务器,而不是在Firefox中修改任何使您不太安全的首选项。

由于 Firefox 68 将本地文件视为始终是跨域的。(请参阅 “本地 HTML 文件可能导致文件窃取”)这可以防止各种安全和隐私问题,例如攻击将本地数据泄露到与下载的 HTML 文件相同的文件夹中。另请参阅文章“对文件 URL 的限制”。

更改是非常不安全的,不应该这样做,因为它允许访问计算机上的所有文件security.fileuri.strict_origin_policy

编辑:我之前建议使用 ,它不太不安全,但该首选项大约在两年前被删除,今天不起作用privacy.file_unique_origin

评论

0赞 zx485 1/3/2021
谢谢你提到这一点。我知道,我的解决方案并不令人满意。但是,限制本地文件访问同一目录中的文件不应被视为安全风险。我认为这在某种程度上是Firefox的设计缺陷。
0赞 radunieczek 1/3/2021
是否可以更改我的 xml 将要工作的浏览器?那我应该选择哪一个呢?
1赞 dbanas 11/16/2023
这个建议对我不起作用。我不得不使用这个选项。privacy.file_unique_originsecurity.fileuri.strict_origin_policy
3赞 RolfBly 5/4/2022 #3

Mozilla建议运行本地服务器。只需在您的机器上安装 Python 3.x,并通过从中启动批处理文件来为您的工作目录提供 XML 和 XSL,如下行:

cmd.exe /c "\Python38-32\python.exe -m http.server"

当然,使用正确的 Python 路径。Firefox 会在 中找到 'your_bewdiful.xml' 。http://localhost:8000/your_bewdiful.xml