我有一个简单的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>
Run Code Online (Sandbox Code Playgroud)
我有一个XSL文件,位于磁盘上的文件夹中(不在Web上).它的相对于我的XSL文件的路径(上图)是:
..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl
<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/>
Run Code Online (Sandbox Code Playgroud)
要么
<xsl:import href="../../../Dependencies/XSL/xsl/htmlhelp/htmlhelp.xsl"/>
Run Code Online (Sandbox Code Playgroud)
似乎没有工作(我得到 - 无法找到文件 - 来自xslproc工具的错误.)
在XSL中编写相对路径的正确方法是什么:import?
提前致谢,
保罗
如果您描述了如何运行样式表,将会很有帮助.
Java中包含/导入的相对路径的一个常见问题:当您将XSLT作为StreamSource加载并且未设置SystemID时,处理器不知道XSLT的"位置"并且无法解析相对路径.
http://www.onjava.com/pub/a/onjava/excerpt/java_xslt_ch5/index.html?page=5
通过提供系统标识符作为StreamSource的参数,您告诉XSLT处理器在哪里查找commonFooter.xslt.如果没有此参数,则当处理器无法解析此URI时,您可能会遇到错误.简单的解决方法是调用setSystemId()方法,如下所示:
// 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);
Run Code Online (Sandbox Code Playgroud)
另外要仔细检查的是你的相对路径确实是正确的.浏览到XSLT在命令提示符下的位置,然后cd到该相对路径以查看它是否找到该文件.