在程序中控制使用dtd校验xml

首先,为DocumentBuilder 设置EntityResolver

DocumentBuilderFactory df = DocumentBuilderFactory.newInstance()
DocumentBuilder db = df.newDocumentBuilder();
db.setEntityResolver(new YourHandler());

这里给db设置你自己的handler,下面是YourHandler 的实现

class YourHandler extends DefaultHandler{
public InputSource resolveEntity (String publicId, String systemId)
throws IOException, SAXException
{
return null;
}
}

YourHandler继承DefaultHandler,DefaultHandler的resolveEntity 的缺省实现是返回null,也就是返回空的dtd。
在调用DocumentBuilder 的parse来生成Document的时候,会调用YourHandler的resolveEntity 方法,得到dtd文件。
这里覆盖DefaultHandler的resolveEntity 就可以实现用程序来控制是否使用dtd校验,使用哪个dtd来校验xml。
比如,

public InputSource resolveEntity (String publicId, String systemId)
throws IOException, SAXException
{
return new InputSource(new StringReader("<?xml version=\"1.0\" encoding=\"\UTF8"?>"));

}
}

返回一个没有内容的文件,等于不做校验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值