How to validate xml against xsd and get *ALL* errors?

后端 未结 1 1582
执念已碎
执念已碎 2020-12-13 00:29

I have a standard code like below to validate xml against xsd, but it throw exception on first error and stops. How to validate xml, but continue on the first and next error

相关标签:
1条回答
  • 2020-12-13 01:06

    Between Validator validator = schema.newValidator(); and StreamSource xmlFile = new StreamSource(xml); add this fragment:

      final List<SAXParseException> exceptions = new LinkedList<SAXParseException>();
      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);
        }
      });
    

    This way, after validate() you'll get full list of exceptions, but if one fatal error occurs, the parsing stops...

    EDIT: the JavaDoc says: The application must assume that the document is unusable after the parser has invoked this method, and should continue (if at all) only for the sake of collecting additional error messages: in fact, SAX parsers are free to stop reporting any other events once this method has been invoked. So fatalError() may or may not cause the parsing to stop.

    0 讨论(0)
提交回复
热议问题