我有一个简单的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
<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/>
或
<xsl:import href="../../../Dependencies/XSL/xsl/htmlhelp/htmlhelp.xsl"/>
似乎没有工作(我得到 - 无法找到文件 - 来自xslproc工具的错误。)
在XSL中编写相对路径的正确方法是什么:import?
提前致谢,
保
答案 0 :(得分:5)
如果您描述了如何尝试运行样式表,那将会很有帮助。
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);
要仔细检查的另一件事是你的相对路径确实是正确的。浏览到XSLT在命令提示符下的位置,然后cd到该相对路径以查看它是否找到该文件。
答案 1 :(得分:3)
可以肯定的是,正斜杠字符是要使用的字符,即
<xsl:import href="..\..\..\Dependencies\XSL\xsl\htmlhelp\htmlhelp.xsl"/>
是不正确的,不需要追求这条轨道。
问题可能是“基本URI”(在RFC 2396中定义)不是我们所期望的。虽然我认为该标准明确涉及确定基URI的规则,但各种xslt处理器存在一些模糊性。
如果你是w / XSLT 2.0,你可以尝试使用fn:base-uri()来看到这个URI确实是你期望的那个。
答案 2 :(得分:1)
我使用您的相对路径和xsltproc测试了一个简单的样式表导入。它对我有用 - 所以你的相对路径一定是错的。
答案 3 :(得分:-1)
使用xsltproc --stringparam baseURI文件:///path/to/your/stylesheet.xsl -o result.xml stylesheet.xsl input.xml