2009-09-15 18 views
0

我正在使用Javascript加載XML並使用XSLT進行轉換。一切正常,直到我嘗試使用<xsl:include>。這樣可以包含文件嗎?使用xsl:include與AJAX/XSLT

以下是相關的XSLT代碼。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
... 
<xsl:include href="another_xslt.xsl"/> 
</xsl:stylesheet> 

這裏是javascript代碼:

var xmlRequest = new XMLHttpRequest(); 
xmlRequest.open("GET", "data.xml", false); 
xmlRequest.send(null); 

var xsltRequest = new XMLHttpRequest(); 
xsltRequest.open("GET", "https://hostname.com/directory/xslt/transform.xsl", false); 
xsltRequest.send(null); 

var xsltProcessor = new XSLTProcessor(); 
xsltProcessor.importStylesheet(xsltRequest.responseXML); 
return xsltProcessor.transformToDocument(xmlRequest.responseXML); 

我使用Firefox 3.5及對xsltProcessor.importStylesheet行腳本失敗沒有任何錯誤消息。

更新:

篡改數據顯示another_xslt.xsl但在父目錄因此它得到一個404

所有XSLT文件的請求是https://hostname.edu/directory/xslt/但Firefox請求而不是http://hostname.edu/directory/another_xslt.xsl。爲什麼它會從父目錄請求文件而沒有https?該HTML文件是在/目錄/管理員/編輯

使用完整的URL修復了問題,但我需要它在服務器上工作,所以我寧願使用現在的相對路徑。

回答

2

這是可能的xsl包含importStylesheet(),所以不應該是問題。

我真的不知道答案,但也許一些指針,以驗證:

你有一個無限遞歸納入其中文件X包括Y,它依次包括X?

確保xsl:include後面沒有後跟xsl:import。

如果你使用類似Tamper Data的東西,你會看到FireFox請求'another_xslt.xsl'嗎?在遠離任何xsl:模板聲明之前,我從來沒有看到xsl:stylesheet中沒有直接定義的xsl:stylesheet,可能將這個xsl:include聲明移到頂端可能會有所幫助(請記住它應該是xsl:import should先走)。

+0

優秀的假設+1 – Thiyagaraj 2009-09-16 07:27:07

+1

感謝您的建議。篡改數據顯示請求,但它來自父目錄。我會用細節更新這個問題。 – mcrumley 2009-09-16 15:55:39

+0

我看到你接受了我的回答,你是否最終解決了你的問題? – 2009-09-22 15:17:20