1

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

基本的.xsl

<!DOCTYPE stylesheet SYSTEM "MyXslt.dtd">

当我使用集成测试点击使用此逻辑的控制器端点时,它运行良好。但是当 Fiddler 命中同一个端点时,我得到一个错误:

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

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

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

路径的其余部分得到了很好的解决,但基本路径是从 eclipse 所在的位置开始的,而不是从工作区开始。

我必须做什么才能找到 DTD?

编辑:

一些海报建议给出绝对路径。那是行不通的,因为应用程序将部署在各种服务器(不是我的本地机器)上。我不能也不应该给出不同服务器中的绝对路径

必须有一种方法,可能是 java 自定义 URI 解析器中的某些设置,它强制引用的 DTD 相对于当前位置而不是相对于 Eclipse 根进行解析。有任何想法吗?

4

2 回答 2

0

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

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

于 2013-06-22T15:25:52.050 回答
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 中的相对路径有意义。

于 2013-06-21T21:16:08.597 回答