我有一个使用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根。有什么想法吗?
答案 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应该相对于样式表的位置而不是位置来解析申请。
与此同时,可能的解决方法包括使用绝对引用并注释掉文档类型声明。