日期:2014-05-18  浏览次数:20937 次

dom4j 解析xml 忽略 dtd 解决生成 Document 还是很慢 的问题
java   代码   SAXReader   saxReader   =   new   SAXReader();        
saxReader.setValidation(false);        
saxReader.setIncludeInternalDTDDeclarations(false);        
saxReader.setIncludeExternalDTDDeclarations(false);        
Document   doc   =   saxReader.read(new   File(fileName));        
System.out.println(doc.asXML());  

无效

网上找了个
      public   class   IgnoreDTDEntityResolver   implements   EntityResolver
        {
                public   InputSource   resolveEntity(java.lang.String   publicId,   java.lang.String   systemId)   throws   SAXException,
                                java.io.IOException
                {
                        if   (systemId.equals( "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd ")
                                        ||   systemId.equals( "http://java.sun.com/dtd/ejb-jar_2_0.dtd ")
                                        ||   systemId.equals( "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd "))
                                return   new   InputSource(new   ByteArrayInputStream( " <?xml   version=’1.0′   encoding=’UTF-8′?> ".getBytes()));
                        else
                                return   null;
                }
        }

依然无效


老外的

import   java.io.ByteArrayInputStream;
import   java.io.IOException;

import   org.omg.CORBA.portable.InputStream;
import   org.xml.sax.EntityResolver;
import   org.xml.sax.InputSource;
import   org.xml.sax.SAXException;

      public   class   IgnoreDTDEntityResolver   implements   EntityResolver
        {
      public   InputSource   resolveEntity(String   publicId,   String   systemId)   {
                if   (   publicId.equals(   "-//Acme//DTD   Foo   1.2//EN "   )   )   {
                        InputStream   in   =   (InputStream)   getClass().get