如何让JDOM忽略DTD声明

Schlemiel 2003-11-25 11:09:30
一个XML文档(mapping.xml),有DTD声明如下:

<?xml version="1.0"?>

<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.exolab.org/mapping.dtd">

我要用JDOM解析这个文档,代码如下:

InputStream in = getClass().getClassLoader().getResourceAsStream("mapping.xml");
Document document = new SAXBuilder().build(in);

在执行第二句的时候抛出异常:
java.net.UnknownHostException: castor.exolab.org

将DTD声明删除即可正常解析。请问如何让JDOM直接忽略DTD声明完成解析?
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Schlemiel 2003-11-26
  • 打赏
  • 举报
回复
搞定了,不过是用的另一种办法。首先新建一个EntityResolver子类:
class NoOpEntityResolver implements EntityResolver {
public InputSource resolveEntity(String publicId, String systemId) {
return new InputSource(new StringBufferInputStream(""));
}
}

然后把这个类的实例赋给SAXBuilder:
builder.setEntityResolver(new NoOpEntityResolver());

这样就不会去locate DTD文件了。anyway,感谢帮助。
Schlemiel 2003-11-26
  • 打赏
  • 举报
回复
非常感谢,我试一下能不能行,成功马上给分。
yangjuanli 2003-11-26
  • 打赏
  • 举报
回复
同意wobelisk() !
wobelisk 2003-11-26
  • 打赏
  • 举报
回复
//if you are using xerces

SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
builder.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);

wxh512 2003-11-26
  • 打赏
  • 举报
回复
路过帮顶
Schlemiel 2003-11-25
  • 打赏
  • 举报
回复
mark

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧