2013-06-21 46 views
1

我有一個使用XSLT轉換(Java 6)的web應用程序。 XSL文件(basic.xsl)引用一個DOCTYPE DTD,就像這樣:系統找不到XSL引用的DTD

Basic.xsl

<!DOCTYPE stylesheet SYSTEM "MyXslt.dtd">

當我使用一個集成測試擊中使用這個邏輯控制器端點,它運行良好。但是,當同一個端點從提琴手打,我得到一個錯誤:

ERROR: 'C:\tools\eclipse\src\com\abc\xslt\MyXslt.dtd (The system cannot find the path specified)' FATAL ERROR: 'Could not compile stylesheet'

MyXslt.dtd住在工作區diectory。因此,這裏的完整路徑 -

C:\Workspace\src\com\abc\xslt\MyXslt.dtd

路徑的其餘部分得到解決的罰款,但基本路徑開始從那裏日食的生活,而不是工作區。

我該怎麼做才能找到DTD?

編輯:

一對夫婦的海報的建議給予了絕對路徑。這是行不通的,因爲應用程序將部署在各種各樣的服務器上(而不是我的本地機器)。我不能,也不應該在不同的服務器中給絕對路徑

必須有一種方法,可能是在java自定義URI解析器中的一些設置,它強制引用的DTD相對於當前位置解析,而不是相對於eclipse根。有任何想法嗎?

+0

爲什麼要將自定義DTD應用於樣式表?我不確定這是否合理。 –

+0

自定義DTD包含在XSL中被起訴的一些實體定義。兩者都來自我繼承的遺留代碼。 – OceanBlue

+0

您在具有不同目錄結構的多臺服務器上運行相同的應用程序?在這種情況下,你是比我更勇敢的程序員。你說DTD是「在工作區目錄中」。這是否意味着它與樣式表在同一個目錄中? –

回答

0

<!DOCTYPE stylesheet SYSTEM "MyXslt.dtd">表示MyXslt.dtd被指定爲相對路徑 - 相對於XSLT文件。由於您的XSLT位於C:\tools\eclipse\src\com\abc\xslt\目錄中,因此也會在該目錄中搜索DTD。

您可以將其更改爲絕對路徑,如<!DOCTYPE stylesheet SYSTEM "C:\Workspace\src\com\abc\xslt\MyXslt.dtd">或更改DTD文件的位置,以便XSLT中的相對路徑有意義。

+0

請參閱編輯。 – OceanBlue

+0

然後將其保存在xslt爲 – Mubin

0

聽起來最重要的事情是向所用工具的開發人員報告錯誤:XSLT樣式表中的相對URI應該相對於樣式表的位置而不是位置來解析的應用程序。

與此同時,可能的解決方法包括使用絕對引用並註釋掉文檔類型聲明。

+1

的同一個包結構中絕對引用無效。請參閱編輯中的說明。 – OceanBlue