Validate an XML File Against Multiple Schema Definitions

前端 未结 8 1553
囚心锁ツ
囚心锁ツ 2020-12-01 09:23

I\'m trying to validate an XML file against a number of different schemas (apologies for the contrived example):

  • a.xsd
  • b.xsd
  • c.xsd
8条回答
  •  清歌不尽
    2020-12-01 09:40

    I ended up using this:

    import org.apache.xerces.parsers.SAXParser;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.helpers.DefaultHandler;
    import java.io.IOException;
     .
     .
     .
     try {
            SAXParser parser = new SAXParser();
            parser.setFeature("http://xml.org/sax/features/validation", true);
            parser.setFeature("http://apache.org/xml/features/validation/schema", true);
            parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking", true);
            parser.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", "http://your_url_schema_location");
    
            Validator handler = new Validator();
            parser.setErrorHandler(handler);
            parser.parse("file:///" + "/home/user/myfile.xml");
    
     } catch (SAXException e) {
        e.printStackTrace();
     } catch (IOException ex) {
        e.printStackTrace();
     }
    
    
    class Validator extends DefaultHandler {
        public boolean validationError = false;
        public SAXParseException saxParseException = null;
    
        public void error(SAXParseException exception)
                throws SAXException {
            validationError = true;
            saxParseException = exception;
        }
    
        public void fatalError(SAXParseException exception)
                throws SAXException {
            validationError = true;
            saxParseException = exception;
        }
    
        public void warning(SAXParseException exception)
                throws SAXException {
        }
    }
    

    Remember to change:

    1) The parameter "http://your_url_schema_location" for you xsd file location.

    2) The string "/home/user/myfile.xml" for the one pointing to your xml file.

    I didn't have to set the variable: -Djavax.xml.validation.SchemaFactory:http://www.w3.org/2001/XMLSchema=org.apache.xerces.jaxp.validation.XMLSchemaFactory

提交回复
热议问题