使用xsl:include with AJAX / XSLT

时间:2009-09-15 21:06:06

标签: ajax xslt

我使用Javascript加载XML并使用XSLT对其进行转换。一切正常,直到我尝试使用<xsl:include>。是否有可能以这种方式包含文件?

这是相关的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文件位于 / directory / admin / edit

使用完整的URL修复了问题,但我需要它在服务器上工作,所以我更喜欢使用像现在这样的相对路径。

1 个答案:

答案 0 :(得分:2)

使用importStylesheet()可以使用xsl-include,这样就不会出现问题了。

我真的没有答案,但也许有一些指示要验证:

你有一个无限的包含递归,其中文件x包含y,而y又包括x?

确保xsl:include后面没有xsl:import。

如果您使用Tamper Data之类的东西,您会看到FireFox请求'another_xslt.xsl'吗?

远景猜测:我从未见过xsl:include在xsl:styles之前没有直接定义xsl:template声明可能会将xsl:include声明移到顶部可能会有所帮助(请记住它xsl:import应该去第一)。