@see javax.xml.parsers.DocumentBuilderFactory#setValidating(boolean)jdom
@see org.jdom.input.SAXBuilder#setValidation(boolean)dom4j
@see org.dom4j.io.SAXReader#setValidation(boolean).... ....

解决方案 »

  1.   

    楼上的File f = new File("struts-config.xml");
    SAXReader reader = new SAXReader();
    reader.setValidation(false);
    Document doc = reader.read(f);还是不行
      

  2.   

    贴出异常stack trace,估计是路径的问题。
      

  3.   

    org.dom4j.DocumentException: Error on line 5 of document file:///E:/eclipse/workspace/log4jtest/struts-config.xml : 未找到外部实体“http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd”。 Nested exception: 未找到外部实体“http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd”。
    at org.dom4j.io.SAXReader.read(SAXReader.java:350)
    at org.dom4j.io.SAXReader.read(SAXReader.java:222)
    at test.main(test.java:25)
    Nested exception: 
    java.net.ConnectException: Connection timed out: connect
    at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3339)
    at org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:3027)
    at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1314)
    at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:623)
    at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
    at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
    at org.dom4j.io.SAXReader.read(SAXReader.java:334)
    at org.dom4j.io.SAXReader.read(SAXReader.java:222)
    at test.main(test.java:25)
    Nested exception: java.net.ConnectException: Connection timed out: connect
    at org.apache.crimson.parser.Parser2.fatal(Parser2.java:3339)
    at org.apache.crimson.parser.Parser2.externalParameterEntity(Parser2.java:3027)
    at org.apache.crimson.parser.Parser2.maybeDoctypeDecl(Parser2.java:1314)
    at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:623)
    at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
    at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
    at org.dom4j.io.SAXReader.read(SAXReader.java:334)
    at org.dom4j.io.SAXReader.read(SAXReader.java:222)
    at test.main(test.java:25)
      

  4.   

    俺也没有想到什么办法,不过倒是想到可以把DTD放到本地,用EntityResolver解决
    EntityResolver resolver = new EntityResolver() {
                public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
                    if ( publicId.equals( "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" ) ) {
                        return InputSource(...本地DTD);
                    }                return null;
                }
            };
    SAXReader reader = new SAXReader();
    reader.setEntityResolver(..);
      

  5.   

    查到了,这样就可以了:
    <<
    SAXReader reader = new SAXReader();
            reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
    >>ref:
    http://sourceforge.net/mailarchive/forum.php?thread_id=3223597&forum_id=2703测试没有问题
      

  6.   

    对了,是用xerces测试的,这个也许应该和具体的parser实现相关。。看你用的是crimson,看看是否查阅下crimson的文档。。
      

  7.   

    我还是将DTD下载到本地,然后修改xml的DTD指向算了。setFeature为false后,还是报SAXNotRecognizedException的错误,可能因为测试机不能连接外部网吧。