dom4j本地校验DTD

如果XML中存在

<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>

这种语句,说明要进行校验。

如果校验则会连接网络,这样做会很慢的。我们可以设置成校验本地的DTD,那么就设置个解释器到SAXReader,代码如下所示:

EntityResolver resolver = new EntityResolver() {
    public InputSource resolveEntity(String publicId, String systemId) {
        if ( publicId.equals( "-//Acme//DTD Foo 1.2//EN" ) ) {
            InputStream in = getClass().getResourceAsStream(
                "/com/acme/foo.dtd"
            );
            return new InputSource( in );
        }
        return null;
    }
};

SAXReader reader = new SAXReader();
reader.setEntityResolver( resolver );
Document document = reader.read(new File(fileName));

这样就能实现本地校验了。

相关推荐