Firefox会对外部实体进行XSLT吗?

时间:2009-10-03 03:58:20

标签: firefox xslt entity doctype

我要做的是拿一个XML文档,比方说http://example.org/data.xml并使用XSL样式表来显示它。 (我无法修改文档本身并添加指令)

所以有几个这样的实用XML文件:

wrapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wrapper [
  <!ENTITY content SYSTEM "http://example.org/data.xml">
]>
<?xml-stylesheet type="text/xsl" href="unwrap.xsl" ?>
<wrapper>
  &content;
</wrapper>

unwrap.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:import href="stylesheet.xsl"/>

  <xsl:template match="/wrapper/node()[1]">
    <xsl:apply-imports/>
  </xsl:template>
</xsl:stylesheet>

总结一下:stylesheet.xsl是为http://example.org/data.xml编写的,浏览器指向wrapper.xml,用户应该看到转换后的http://example.org/data.xml

这是少见的情况之一,其中IE(和Chrome)中的内容可以正常工作,但不是Firefox。

AFAIK Firefox支持外部XML实体,但似乎它们在XSL代码中不可见。我从2006年发现this article,它在Firefox 1.5中描述了这个问题(我使用的是3.5.3)

有没有解决方法呢?

1 个答案:

答案 0 :(得分:1)

That XML looks familiar;)

目前,由于安全性和拒绝服务问题,FireFox不会加载外部DTD和实体引用。例如:http://en.wikipedia.org/wiki/Billion_laughs

有一个开放的Mozilla bug描述了为什么以及是否要使其具有可配置性的原因和冗长的争论:https://bugzilla.mozilla.org/show_bug.cgi?id=22942

There does appear to be one workaround to loading DTDs 但我猜这可能不是一个可行的解决方案

Firefox将加载本地 DTD文件

如果你把它们放在Windows的这个目录中:

C:\Program Files\Mozilla Firefox\res\dtd\...

Linux目录:

/**mileage may vary**/MozillaFirefox/lib/res/dtd/

使用实体参考的一个想法: 如果您可以控制wrapper.xml的内容,那么您可以获取http://example.org/data.xml(服务器端)的内容并将其作为包装文件的完整内容进行回显,并添加样式表处理指令(假设你有一些动态的服务器端功能。)