stax xml validation

Tim picture Tim · Apr 26, 2011 · Viewed 16.9k times · Source

I know I can validate xml-file when I use sax. But can I validate when I use Stax?

Answer

mnicky picture mnicky · May 17, 2011

There are two ways of XML validation possible with SAX and DOM:

  1. validate alone - via Validator.validate()
  2. validate during parsing - via DocumentBuilderFactory.setSchema() and SAXParserFactory.setSchema()

With StAX, validation is possible, but only the first way of doing it.

You can try something like this:

import javax.xml.validation.*;
import javax.xml.transform.stax.*;
import javax.xml.stream.*;
import javax.xml.*;
import java.io.*;

public class StaxValidation {

    public static void main (String args[]) throws Exception {

        XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream("test.xml"));

        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = factory.newSchema(new File("test.xsd"));

        Validator validator = schema.newValidator();
        validator.validate(new StAXSource(reader));

        //no exception thrown, so valid
        System.out.println("Document is valid");

    }
}