0

我正在通过 Java 应用程序转换一些 xml。我用 javax.xml.transform.Source 加载 xml

Source src = new StreamSource(getXml());

解析 xml 时,它会尝试加载 DTD 和一些实体:

<!DOCTYPE dmodule SYSTEM "http://mysecureserver/System/DTD/dmodule/proced.dtd"[
 <!NOTATION SWF SYSTEM "">
 <!NOTATION PNG SYSTEM "">
 <!ENTITY % catalog PUBLIC "-//MyCompany//ENTITIES//EN "http://mysecureserver/catalog.pen">
  %catalog;
]>

我收到文件 IO 错误,因为没有凭据我无法访问文件“catalog.pen”。有没有办法将凭据传递给 javax.xml.transform.Source?

此外,我不能更改 DTD 声明,因为我不“拥有”xml。我只能读它。

4

1 回答 1

2

您可以使用自定义实体解析器来检索文件(通过使用凭据或使用文件的缓存版本)。有关示例,请参阅Java、xml、XSLT:防止 DTD 验证

于 2012-04-19T07:10:35.667 回答