用于在Windows上查找相关文件路径的XSL导入用法

时间:2009-09-19 20:32:08

标签: 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上)。它相对于我的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?

提前致谢,

4 个答案:

答案 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