Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 系统找不到XSL引用的DTD_Java_Xslt_Filepath - Fatal编程技术网

Java 系统找不到XSL引用的DTD

Java 系统找不到XSL引用的DTD,java,xslt,filepath,Java,Xslt,Filepath,我有一个使用XSLT转换(Java6)的Web应用程序。XSL文件(basic.XSL)引用DOCTYPE DTD,如下所示: Basic.xsl 当我使用集成测试点击使用此逻辑的控制器端点时,它运行良好。但当Fiddler击中同一端点时,我得到一个错误: 错误:“C:\tools\eclipse\src\com\abc\xslt\MyXslt.dtd(系统找不到指定的路径)” 致命错误:“无法编译样式表” MyXslt.dtd位于工作区目录中。这是完整的路径- C:\Workspace\sr

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

Basic.xsl

当我使用集成测试点击使用此逻辑的控制器端点时,它运行良好。但当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根进行解析。有什么想法吗?

意味着
MyXslt.dtd
被指定为相对于XSLT文件的相对路径。由于XSLT位于
C:\tools\eclipse\src\com\abc\XSLT\
目录中,因此也将在该目录中搜索DTD


您可以将其更改为绝对路径,像
或更改DTD文件的位置,以便XSLT中的相对路径有意义。

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


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

为什么要对样式表应用自定义DTD?我不确定这是否有意义。自定义DTD包含一些XSL中使用的实体定义。这两个都是我继承的遗留代码。您在多个具有不同目录结构的服务器上运行相同的应用程序吗?那样的话,你比我更勇敢。您说DTD“在工作区目录中”。这是否意味着它与样式表位于同一目录中?@OceanBlue您解决过这个问题吗?我在尝试从可执行文件中引用本地DTD时仍然存在此问题。绝对引用不起作用。请参阅编辑中的解释。然后将其保留在xslt所在的相同包结构中