Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml xsl:import或xsl:include的相对路径_Xml_Xslt_Vbscript_Client Side - Fatal编程技术网

Xml xsl:import或xsl:include的相对路径

Xml xsl:import或xsl:include的相对路径,xml,xslt,vbscript,client-side,Xml,Xslt,Vbscript,Client Side,我正在尝试使用VBScript对XML对象进行XSLT转换。 我正在翻译的XSL文件包括指令。如果我使用绝对URL(http://localhost/mysite/script.xsl),它精细地导入样式表;但是,如果我使用相对路径(script.xsl),它会报告“未找到资源”。我需要能够在一组机器之间进行移植,因此我需要能够使用相对URI。有什么建议吗 注: VBScript文件位于http://localhost/myscript.asp 第一个XSL文件位于http://localho

我正在尝试使用VBScript对XML对象进行XSLT转换。
我正在翻译的XSL文件包括
指令。如果我使用绝对URL(
http://localhost/mysite/script.xsl
),它精细地导入样式表;但是,如果我使用相对路径(
script.xsl
),它会报告“未找到资源”。我需要能够在一组机器之间进行移植,因此我需要能够使用相对URI。有什么建议吗

注:

  • VBScript文件位于
    http://localhost/myscript.asp
  • 第一个XSL文件位于
    http://localhost/mysite/styles.xsl
  • 第二个XSL文件位于
    http://localhost/mysite/script.xsl
  • 使用相对路径mysite/script.xsl也不起作用
增编:

谢谢大家的回答。我越是深入研究执行此操作的代码,它就越陌生
myscript.asp
是一种相当不寻常的代码编译。发生的是
样式。xsl
作为XML块(
)包含在
myscript.asp
的HTML输出中,然后在客户端使用VBScript将该块作为样式表加载。然后使用此样式表转换通过XMLHTTP检索的XML块。因此问题在于
样式的上下文。xsl
是客户端的HTML,与
脚本.xsl
的位置无关。

相对路径中的“当前目录”是否可能是ASP页面的位置,而不是xsl文件?换句话说,如果您还没有,您可以尝试:

<xsl:import href="mysite/script.xsl"/>

xsl:import、xsl:include和document()函数的当前目录是包含使用它们的转换的目录。因此,您所说的xsl:import指令应该是有效的


我能想到的唯一一件事可能会影响这一点:如果使用相对路径,文件将直接从文件系统读取,而如果使用绝对URI,则将从web服务器检索。有没有可能有某种安全设置阻止脚本读取此目录中的文件?

@Jon我想你很接近了。。。但它不应该是

<xsl:import href="/mysite/script.xsl"/>


…使用前导斜杠?

我经常遇到这个问题,因为我看不到(或者因为没有阅读相关文档而不知道)库正在使用自定义URI解析器。我不记得这是不是规范,但在Saxon/java世界中,在尝试解析include/import语句以及document()函数的URI时,自定义URI解析器首先受到攻击。如果它不能解析URI,默认的URI解析程序会给它一次尝试,当URI为绝对值时,通常不会错过


因此,可能是ASP引擎中使用了基于应用程序上下文的上下文驱动URI解析器

加载JS、Image或CSS文件时,需要一个定义approt或webroot的变量

 <xsl:import href="{$approot}/somedir/script.xsl"/>

或者如果XML中有值

 <xsl:import href="{/root/@approot}/somedir/script.xsl"/>

我会通过跑步来解决这个问题。运行此工具后,您实际上可以看到脚本试图打开的文件,即使这些文件不存在

第一次尝试:

我尝试将script.xsl作为另一个xml块,并以我能想象到的任何方式更改import语句,但没有成功

最终解决方案:


由于包含script.xsl的绝对url从一开始就起作用,因此我的最终解决方案是使用正确的doctype将style.xsl转换为style.asp。在这个文件中,我能够检索服务器名称、协议和路径,并使用asp将它们回送到导入语句的正确位置。然后,当这个文件包含在mysscript.asp中时,它具有服务器的正确绝对url。这有点像黑客,但这是我发现的解决这一相当复杂问题的唯一方法。

有没有可能发布myscript.asp的代码?myscript.asp是否位于或?中引用了此问题:它不适用于xsl:import,它适用于或等常规元素。