Xslt XSL导入用于在Windows上定位相对文件路径
我有一个简单的XSL文件,如下所示: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
<?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);