import java.io.*;
import javax.xml.parsers.*;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.*;
import org.dom4j.util.XMLErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
public class XMLValidation {
public void validateXML(String xsdFileName, String xmlFileName) {
try{
//create and configure instance of SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
//create and configure instance of SAXParser
SAXParser parser = factory.newSAXParser();
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
"http://www.w3.org/2001/XMLSchema");
parser.setProperty(
"http://java.sun.com/xml/jaxp/properties/schemaSource",
"file:" + xsdFileName);
//create a SAXValidator instance
SAXValidator validator = new SAXValidator(parser.getXMLReader());
XMLErrorHandler errorHandler = new XMLErrorHandler();
validator.setErrorHandler(errorHandler);
//create a reader
SAXReader xmlReader = new SAXReader();
Document xmlDocument = (Document) xmlReader.read(new File(xmlFileName));
//validate
validator.validate(xmlDocument);
//output
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter( new FileWriter(new File("d://err.xml")), format);
if (errorHandler.getErrors().hasContent()) {
System.out.println("Sorry, the xml disagree with the xsd.");
writer.write(errorHandler.getErrors());
writer.close();
} else {
System.out.println("Congratulations!");
}
}catch(Exception ex){
System.out.println( xmlFileName + " disagree with " + xsdFileName + "/nReason: " + ex.getMessage());
ex.printStackTrace();
}
}
public static void main(String[] args) {
XMLValidation xmlValidation = new XMLValidation();
xmlValidation.validateXML("mdl.xsd","mdl.xml");
}
}