如何针对xsdvalidationxml并获取* ALL *错误?

我有一个像下面的标准代码来validationxml对xsd,但它在第一次错误时抛出exception并停止。 如何validationxml,但继续第一个和下一个错误并最终得到它们? 它甚至可能吗?

public static void validate(File xml, InputStream xsd) { try { SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); Schema schema = factory.newSchema(new StreamSource(xsd)); Validator validator = schema.newValidator(); StreamSource xmlFile = new StreamSource(xml); validator.validate(xmlFile); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 

Validator validator = schema.newValidator();StreamSource xmlFile = new StreamSource(xml); 添加此片段:

  final List exceptions = new LinkedList(); validator.setErrorHandler(new ErrorHandler() { @Override public void warning(SAXParseException exception) throws SAXException { exceptions.add(exception); } @Override public void fatalError(SAXParseException exception) throws SAXException { exceptions.add(exception); } @Override public void error(SAXParseException exception) throws SAXException { exceptions.add(exception); } }); 

这样,在validate()您将获得完整的exception列表,但如果发生一个致命错误,解析将停止…

编辑:JavaDoc说: 应用程序必须假定在解析器调用此方法后文档不可用,并且应该继续(如果有的话)只是为了收集其他错误消息:事实上, SAX解析器可以自由停止一旦调用此方法, 报告任何其他事件 所以fatalError()可能会也可能不会导致解析停止。