我正在尝试使用VBScript对XML对象进行XSLT转换
我正在翻译的XSL文件包含<xsl:import href="script.xsl"/>
指令。如果我使用绝对URL(http://localhost/mysite/script.xsl
),它会很好地导入样式表;但是,如果我使用相对路径(script.xsl
),则报告“找不到资源”。我需要能够在一组机器中移植它,所以我需要能够使用相对URI。有什么建议吗?
注意:
http://localhost/myscript.asp
http://localhost/mysite/styles.xsl
http://localhost/mysite/script.xsl
mysite/script.xsl
也不起作用附录:
谢谢大家,感谢您的回答。我越是深入研究这样做的代码,它就是陌生人。 myscript.asp
是一个非常不寻常的代码汇编。会发生什么styles.xsl
作为XML块(myscript.asp
)包含在<xml src=...>
的HTML输出中,然后在客户端使用VBScript将该块作为样式表加载。然后,此样式表用于转换通过XMLHTTP检索的XML块。所以问题是styles.xsl
的上下文是客户端的HTML,与script.xsl
的位置无关。
答案 0 :(得分:1)
xsl:import,xsl:include的当前目录,document()函数是包含使用它们的转换的目录。所以你说你正在使用的xsl:import指令应该正常工作。
我唯一能想到的可能会影响到这一点:如果使用相对路径,则直接从文件系统读取文件,而如果使用绝对URI,则从Web服务器检索文件。有可能是某些安全设置阻止脚本读取此目录中的文件吗?
答案 1 :(得分:1)
@Jon我觉得你很亲密......但不应该......
<xsl:import href="/mysite/script.xsl"/>
......有一个领先的斜线?
答案 2 :(得分:1)
我会通过运行Sysinternals Process Monitor来解决这个问题。运行此工具后,您可以实际查看脚本尝试打开的文件,即使它们不存在也是如此。
答案 3 :(得分:0)
出于相对路径的目的,“当前目录”是否可能是ASP页面的位置,而不是您的XSL文件?换句话说,如果您还没有,可以尝试:
<xsl:import href="mysite/script.xsl"/>
答案 4 :(得分:0)
我经常遇到这个问题,因为有一个我无法看到的库使用的自定义URI解析器(或者因为我没有阅读相关文档而不知道。)我不记得是否这样是规范与否,但在Saxon / java世界中,自定义URI解析器首先尝试解析包含/ import语句的URI以及document()函数。如果它无法解析URI,则默认的URI解析器会尝试一次,当URI绝对时,通常永远不会错过。
因此,ASP引擎可能正在使用基于应用程序上下文的上下文驱动的URI解析器。
答案 5 :(得分:0)
第一次尝试:
我尝试将script.xsl作为另一个xml块并以我能想象的各种方式更改import语句,但没有成功。
最终解决方案:
由于包含script.xsl的绝对URL从一开始就起作用,我的最终解决方案是使用正确的doctype将style.xsl转换为style.asp。在这个文件中,我随后能够检索服务器名称,协议和路径,并使用asp将它们回显到import语句中的正确位置。然后,当此文件包含在mysscript.asp中时,它具有正确的服务器绝对URL。这有点像黑客,但我发现解决这个相当复杂的情况的唯一方法。
答案 6 :(得分:-1)
在加载JS,Image或CSS文件时,您需要一个定义approot或webroot的变量。
<xsl:import href="{$approot}/somedir/script.xsl"/>
或者如果你有XML中的值,
<xsl:import href="{/root/@approot}/somedir/script.xsl"/>