Xslt XSL导入用于在Windows上定位相对文件路径

Xslt XSL导入用于在Windows上定位相对文件路径,xslt,Xslt,我有一个简单的XSL文件,如下所示: <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:import href="html/docbook.xsl"/> </xsl:stylesheet> 我有一个XSL文件,它位于磁盘上的一个文件夹中(不在web上)。它相对于我的X

我有一个简单的XSL文件,如下所示:

<?xml version='1.0'?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:import href="html/docbook.xsl"/> 

</xsl:stylesheet>  

我有一个XSL文件,它位于磁盘上的一个文件夹中(不在web上)。它相对于我的XSL文件(如上)的路径是:

。\..\..\Dependencies\XSL\XSL\htmlhelp\htmlhelp.XSL


似乎不起作用(我从xslproc工具中得到-找不到文件-错误)

在XSL:import中编写相对路径的正确方法是什么

提前感谢,


Paul

可以肯定的是,正斜杠字符是要使用的字符,即

<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/>

肯定是不正确的,不需要追求这一轨道

问题可能是“基本URI”(如RFC2396中所定义)不是我们所期望的。尽管我相信该标准明确了与确定基本URI相关的规则,但对于各种xslt处理器来说,存在一些模糊性


如果您是w/XSLT 2.0,您可以尝试使用fn:base-uri()来查看此uri是否确实是您所期望的uri。

如果您描述了如何尝试运行样式表,这将非常有用

Java中包含/导入的相对路径存在一个常见问题: 当您将XSLT作为流源加载时,并且未设置系统ID,处理器不知道XSLT的“位置”,并且无法解析相对路径

通过提供系统标识符作为 参数添加到StreamSource,您可以 告诉XSLT处理器到哪里 查找commonFooter.xslt。没有 如果使用此参数,您可能会遇到 处理器无法运行时出错 解析此URI。简单的解决办法是 将setSystemId()方法调用为 如下:


另一件需要仔细检查的事情是,您的相对路径确实是正确的。浏览到XSLT在命令提示符中的位置,并将其cd到该相对路径,以查看它是否找到该文件。

我使用相对路径和xsltproc测试了一个简单的样式表导入。这对我很有效——所以你的相对路径肯定是错的

使用xsltproc--stringparam baseURIfile:///path/to/your/stylesheet.xsl -o result.xml stylesheet.xsl input.xml

<xsl:import href="../../../Dependencies/XSL/xsl/htmlhelp/htmlhelp.xsl"/> 
<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/>
// construct a Source that reads from an InputStream
Source mySrc = new StreamSource(anInputStream);
// specify a system ID (a String) so the 
// Source can resolve relative URLs
// that are encountered in XSLT stylesheets
mySrc.setSystemId(aSystemId);