首先,为DocumentBuilder 设置EntityResolver
这里给db设置你自己的handler,下面是YourHandler 的实现
YourHandler继承DefaultHandler,DefaultHandler的resolveEntity 的缺省实现是返回null,也就是返回空的dtd。
在调用DocumentBuilder 的parse来生成Document的时候,会调用YourHandler的resolveEntity 方法,得到dtd文件。
这里覆盖DefaultHandler的resolveEntity 就可以实现用程序来控制是否使用dtd校验,使用哪个dtd来校验xml。
比如,
返回一个没有内容的文件,等于不做校验。
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"?>"));
}
}
返回一个没有内容的文件,等于不做校验。