你这里有一点错误
factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",
    new File("myschema.xsd"));应该把new File("myschema.xsd")换成方法参数schema。另外,不知道你的ErrorHandle是怎么写的。我自己换成ErrorHandler的实现类,结果是可以报错。

解决方案 »

  1.   

    一边都用JDOM或者DOM4J,直接用DOM的比较少,因为它的功能太弱了。
      

  2.   

    你看一下下面的代码,运行时如果xml文件格式不对会报错。
    临时整理的,有点乱public class XMLResource {
        static public boolean validate(InputStream in, InputStream schema)
                throws Exception {        //log.debug("DefaultParser.validate() begin:");
            boolean result = false;
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            factory.setNamespaceAware(true);
            factory.setValidating(true);
            factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
            //factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",new File("myschema.xsd"));
            factory.setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource",schema);
            DocumentBuilder parser = factory.newDocumentBuilder();        //parser.setErrorHandler(errorHandle);
            parser.setErrorHandler(
                  new org.xml.sax.ErrorHandler() {
                    public void fatalError(SAXParseException spe)
                            throws SAXException {
                        System.out.println("** Warning"
                            + ", line " + spe.getLineNumber()
                            + ", uri " + spe.getSystemId());
                        System.out.println("   " + spe.getMessage());                    throw spe;
                    }
                    // treat validation errors as fatal
                    public void error(SAXParseException spe)
                            throws SAXParseException {
                        System.out.println("** Warning"
                            + ", line " + spe.getLineNumber()
                            + ", uri " + spe.getSystemId());
                        System.out.println("   " + spe.getMessage());                    throw spe;
                    }                 // dump warnings too
                    public void warning(SAXParseException err)
                            throws SAXParseException {
                      System.out.println("** Warning"
                        + ", line " + err.getLineNumber()
                        + ", uri " + err.getSystemId());
                      System.out.println("   " + err.getMessage());
                    }              
            });          parser.parse(in);        //if (errorHandle.getMsgList().size() == 0) {
                result = true;
            //}
            //log.debug("DefaultParser.validate() result:" + result);
            return result;
        }
        public static void main(String[] args) throws Exception{
            BufferedInputStream input =
                new BufferedInputStream(
                    new FileInputStream("po.xml"));        BufferedInputStream schema =
                new BufferedInputStream(
                    new FileInputStream("po.xsd"));        XMLResource.validate(input, schema);
        }
    }