我想要做的是拿一個XML文檔,比如說http://example.org/data.xml,並用一個XSL樣式表應用。 (我不能修改文檔本身並添加指令)Firefox會對外部實體執行XSLT嗎?
因此,有幾個實用的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,用戶應該看到transforme d http://example.org/data.xml。
這是在IE(和Chrome)中按預期工作但在Firefox中無法正常工作的罕見情況之一。
AFAIK Firefox支持外部XML實體,但看起來它們在XSL代碼中是不可見的。我從2006年發現this article,它在Firefox 1.5中描述了這個問題(我正在使用3.5.3)
有沒有解決這個問題的方法?
我也剛剛意識到瀏覽器將不會獲取當前文檔域以外的XML文檔。因此,除非wrapper.xml也在example.org上託管,否則我無法告訴它獲取http://example.org/data.xml。但在這種情況下,我可能會修改數據。xml無論如何;) 這裏的意圖是讓客戶端做所有的工作,服務器也將使用每個請求的恆定數量的帶寬。本來我認爲會是一個整潔的黑客攻擊,但是這個安全性在這一輪持有王牌。 =) – Serguei