下面使用xsd校验xml
public class XmlValidator { private static String errorMsg; public static boolean check(String xmlFile, String xsdFile){ boolean rs = false; rs = checkXSDFormat(xmlFile, xsdFile); return rs; } /** * 校验 */ private static boolean checkXSDFormat(String xmlFile, String xsdFile) { SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); XSDErrorHandler errorHandler = new XSDErrorHandler(); Validator validator = null; try { Schema schema = factory.newSchema(new File(xsdFile)); validator = schema.newValidator(); validator.setErrorHandler(errorHandler); } catch (SAXParseException e) { errorMsg = e.getMessage(); return false; } catch (SAXException e) { errorMsg = e.getMessage(); return false; } FileInputStream fis = null; try { fis = new FileInputStream(xmlFile); validator.validate(new StreamSource(fis));//new File(this.xmlFile))); } catch (SAXException e) { errorMsg = e.getMessage(); return false; } catch (IOException e) { errorMsg = e.getMessage(); return false; } finally { if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } if(errorHandler.getError() != null){ errorMsg = errorHandler.getError(); return false; } return true; } public static String getError() { return errorMsg; } }
测试
public class XmlValidate { private static String xmlFile = "xml文件路径"; private static String xsdFile = "对应的xsd文件路径"; public static void main(String[] args) { System.out.println(XmlValidator.check(xmlFile, xsdFile)); System.out.println(XmlValidator.getError()); } }