我正在通过 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。我只能阅读。
最佳答案
您可以使用自定义实体解析器来检索文件(通过使用凭据或使用文件的缓存版本)。请参阅Java, xml, XSLT: Prevent DTD-Validation举个例子。
关于javax.xml.transform 带有凭据的源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220065/