系统找不到XSL引用的DTD

时间:2013-06-21 20:47:14

标签: java xslt filepath

我有一个使用XSLT转换的Web应用程序(Java 6)。 XSL文件(basic.xsl)引用DOCTYPE DTD,如下所示:

Basic.xsl

<!DOCTYPE stylesheet SYSTEM "MyXslt.dtd">

当我使用集成测试点击使用此逻辑的控制器端点时,它运行正常。但是当Fiddler遇到同一个端点时,我收到一个错误:

  

错误:'C:\ tools \ eclipse \ src \ com \ abc \ xslt \ MyXslt.dtd(系统找不到指定的路径)'   致命错误:'无法编译样式表'

MyXslt.dtd位于工作区内。所以这是完整的路径 -

  

C:\工作区\ SRC \ COM \ ABC \ XSLT \ MyXslt.dtd

路径的其余部分正在得到解决,但基本路径是从eclipse所在的地方开始,而不是工作空间。

我该怎么做才能找到DTD?

修改

有几张海报建议给出绝对路径。这不起作用,因为应用程序将部署在vaious服务器(而不是我的本地机器)上。我不能也不应该在不同服务器中提供绝对路径

必须有一种方法,也许是java自定义URI解析器中的一些设置,它强制引用的DTD相对于当前位置解析而不是相对于eclipse根。有什么想法吗?

2 个答案:

答案 0 :(得分: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中的相对路径有意义。

答案 1 :(得分:0)

听起来最重要的事情是向您正在使用的工具的开发人员报告错误:XSLT样式表中的相对URI应该相对于样式表的位置而不是位置来解析申请。

与此同时,可能的解决方法包括使用绝对引用并注释掉文档类型声明。