2009-09-19 61 views
3

定位相對文件路徑XSL進口使用率我有一個簡單的XSL文件,它看起來像:在Windows

<?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文件。這是相對路徑到我的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?

由於提前,

保羅

回答

3

可以肯定,前斜線字符的那些被使用,即

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

是正不正確,並不需要追求這個跟蹤。

問題可能是「基本URI」(如RFC 2396中定義的)不是我們所期望的。儘管我相信標準明確規定了有關確定基本URI的規則,但各種xslt處理器存在一些不明確之處。

如果您使用的是XSLT 2.0,您可以嘗試使用fn:base-uri()來查看該URI確實是您所期望的。

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的位置,然後轉到相對路徑以查看它是否找到該文件。

1

我使用相對路徑和xsltproc測試了一個簡單的樣式表導入。它對我有效 - 所以你的相對路徑一定是錯的。

-1

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