2011-07-08 57 views
8

上我有下面的XML:IE9和Chrome沒有渲染與XSL XML如果XML是本地和XSL是遠程服務器

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?> 

和XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <html> 
     <head><title>Test</title></head> 
    </html> 
</xsl:stylesheet> 

這工作正常IE8但不在IE9或Chrome中。我已經讀過,如果XML源文件在本地機器上,IE9似乎禁止從遠程服務器加載XSL。 有什麼辦法讓IE9和Chrome瀏覽器將遠程XSL文件應用到本地XML文件,而不會影響瀏覽器的安全設置? 我們有一個桌面應用程序,用於生成XML報告並將其顯示在瀏覽器中,並使用託管在遠程服務器上的樣式表進行轉換。

回答

7

這是在本地工作嗎?我不這麼認爲,因爲XML和XSLT都有一些錯誤。

Chrome會阻止本地XML和XSLT處理!這是一個問題,或者出於安全考慮而被禁用。看看這個Chrome Bug Report的一些變通。

IE9禁止混合使用本地XML和遠程XSLT。也出於安全原因! (我沒有一個鏈接進行)

你的XML必須至少有一個根元素:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="http://www.test.com/AuditTrail.xsl"?> 
<hello/> 

和你的XSLT需要有一些XSLT模板:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <head><title>Test</title></head> 
    </html> 
</xsl:template> 

</xsl:stylesheet> 

隨着此更正此示例將適用於IE8和Firefox。
在Chrome中,XML和XSLT需要位於Web服務器上。在IE9中都需要在網絡服務器上或本地存儲(無混合)。

+0

@Tom可能會切換到JavaScript解決方案,例如, jQuery變換。這應該不重寫XSLT(但沒有測試它)[示例這裏](http://stackoverflow.com/questions/2042178/chrome-and-safari-xslt-using-javascript/2042441#2042441) – therealmarv

+0

我的xml和xslt有一個根元素和一個模板,我只是把它留在外面,因爲我只是想顯示標題,應該包含所有內容。你的答案證實,這是由於安全限制(網絡和本地) - 所以沒有辦法讓它工作,而不改變xml和它的轉換方式? – TJF

+1

有幾個(壞)解決方案,但我認爲最好的方法是改變程序轉換此XML的方式,不要依賴瀏覽器XSLT,如果要顯示報告,請使用自己的XSLT庫。這裏有一些不好的解決方案: - 將您的IE降級到IE8。 - 用firefox試試吧。 - 嘗試運行Chrome [Chromium Bug Comment](http://code.google.com/p/chromium/issues/detail?id=70088#c12) – therealmarv

3

我們有一個桌面應用程序, 生成XML報告,並顯示 他們在瀏覽器中,帶有在 遠程服務器上託管 樣式錶轉化

我認爲,最簡單的方法就是下載或者在用戶的本地硬盤上(使用該應用程序)通過HTTP協議存儲/緩存(最後一份)樣式表,然後執行「完全合法的」客戶端轉換。