7

I want to parse a xml file using a SAXParser or XMLReader and verify that the file conforms to a specific xsd file (new File( "example.xsd" )).

It's easy to

  1. do the validation against a xsd file in an extra step using a Validator like in this SO answer.

  2. to validate while parsing by specifying the name of the xsd as "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation" like in this SO answer.

But how can I validate against a new File( "example.xsd" ) while parsing?

1 Answer 1

5

Assuming Java 5 or above, set the schema on the SAXParserFactory:

SchemaFactory schemaFactory = SchemaFactory
    .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File("myschema.xsd"));
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
saxFactory.setSchema(schema);
SAXParser parser = saxFactory.newSAXParser();
parser.parse("data.xml", new DefaultHandler() {
  // TODO: other handler methods
  @Override
  public void error(SAXParseException e) throws SAXException {
    throw e;
  }
});

You handle validation errors by overriding the error method on your handler and acting as you see fit.

Sign up to request clarification or add additional context in comments.

2 Comments

It seems that the parser still uses the schema defined inside the xml file and not the one I set with schemaFactory( newSchema(...)).
That isn't the behaviour I see (the parser always validates against the schema set on the factory, even if one is set in the document). Without sample documents/code, it is difficult to identify the problem.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.