/* * Created on 2005-apr-03 */ import java.io.FileInputStream; import java.io.File; import org.xml.sax.XMLReader; import org.xml.sax.InputSource; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXParseException; import org.xml.sax.SAXException; import org.xml.sax.helpers.XMLReaderFactory; /** * SAX-klass med metoder för att avgöra om en xml-fil är välutformad och valid * * @author Henrik Johansson */ public class SAXChecker implements ErrorHandler { private boolean noerrors = true; private boolean nofatals = true; /** * Parsar xml-filen filename. Denna klass implementerar * ErrorHandler, vid varningar eller fel under parsningen * kommer parsern att anropa metoderna warning, error eller fatalError. * * @param filename namnet på xml-filen * @param valid skall validiteten kontrolleras */ public void check(String filename, boolean valid) { try { XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setErrorHandler(this); reader.setFeature("http://xml.org/sax/features/validation", valid); InputSource is = new InputSource(new FileInputStream(new File(filename))); is.setSystemId(filename); reader.parse(is); } catch(Exception e) { } if(nofatals) { System.out.println(filename + " är välutformad."); } else { System.out.println(filename + " är _INTE_ välutformad."); } if(valid && noerrors) { System.out.println(filename + " är valid."); } else if(valid) { System.out.println(filename + " är _INTE_ valid."); } } /** * Skriver ut fel- eller varningsmeddelande till stderr * * @param type vilken typ av fel: varning, error fatal error. * @param exception det undantag som genererats av felet */ private void printMessage(String type, SAXParseException exception) { System.err.println(type + ": row=" + exception.getLineNumber() + ", column=" + exception.getColumnNumber()); exception.printStackTrace(); System.out.println(); } /** * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException) */ public void warning(SAXParseException exception) throws SAXException { printMessage("WARNING", exception); } /** * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException) */ public void error(SAXParseException exception) throws SAXException { noerrors = false; printMessage("ERROR", exception); } /** * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException) */ public void fatalError(SAXParseException exception) throws SAXException { nofatals = false; printMessage("FATAL ERROR", exception); } public static void main(String[] args) { SAXChecker sc = new SAXChecker(); if(args.length != 2) { System.err.println("usage: java SAXChecker "); System.exit(1); } boolean validate = args[1].toLowerCase().equals("true"); sc.check(args[0], validate); } }