public String validateSurvey(File xmlFile) throws Exception { SAXReader saxReader = new SAXReader(); saxReader.setValidation(true); saxReader.setFeature("http://xml.org/sax/features/validation", true); saxReader.setFeature( "http://apache.org/xml/features/validation/schema", true); // saxReader .setProperty( "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", "survey.xsd"); XMLErrorHandler errorHandler = new XMLErrorHandler(); saxReader.setErrorHandler(errorHandler); Document document = saxReader.read(xmlFile); if (errorHandler.getErrors().hasContent()) { return errorHandler.getErrors().asXML(); } else { return "success"; } }
/** * 通过XSD(XML Schema)校验XML */ @Test public void validateXMLByXSD() { String path = this.getClass().getResource("/").getPath(); int index = path.lastIndexOf("/"); path = path.substring(0, index); String xmlFileName = path + "/processCore.xml"; // String xsdFileName = // "/Users/user/workspace/bulbasaur/core/src/test/resources/process_bak.xsd"; String xsdFileName = path + "/test.xsd"; try { // 创建默认的XML错误处理器 XMLErrorHandler errorHandler = new XMLErrorHandler(); // 获取基于 SAX 的解析器的实例 SAXParserFactory factory = SAXParserFactory.newInstance(); // 解析器在解析时验证 XML 内容。 factory.setValidating(true); // 指定由此代码生成的解析器将提供对 XML 名称空间的支持。 factory.setNamespaceAware(true); // 使用当前配置的工厂参数创建 SAXParser 的一个新实例。 SAXParser parser = factory.newSAXParser(); // 创建一个读取工具 SAXReader xmlReader = new SAXReader(); // 获取要校验xml文档实例 Document xmlDocument = xmlReader.read(new File(xmlFileName)); // 设置 XMLReader 的基础实现中的特定属性。核心功能和属性列表可以在 // [url]http://sax.sourceforge.net/?selected=get-set[/url] 中找到。 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); // 创建一个SAXValidator校验工具,并设置校验工具的属性 SAXValidator validator = new SAXValidator(parser.getXMLReader()); // 设置校验工具的错误处理器,当发生错误时,可以从处理器对象中得到错误信息。 validator.setErrorHandler(errorHandler); // 校验 validator.validate(xmlDocument); XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint()); // 如果错误信息不为空,说明校验失败,打印错误信息 if (errorHandler.getErrors().hasContent()) { System.out.println("XML文件通过XSD文件校验失败!"); writer.write(errorHandler.getErrors()); } else { System.out.println("Good! XML文件通过XSD文件校验成功!"); } } catch (Exception ex) { System.out.println("XML文件: " + xmlFileName + " 通过XSD文件:" + xsdFileName + "检验失败。\n原因: " + ex.getMessage()); ex.printStackTrace(); } }
private void validateOrder(File anOrderFile) { SAXReader reader = new SAXReader(); reader.setValidation(true); try { reader.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", //TestInfo.HERITRIX_SETTINGS_SCHEMA_FILE.getAbsolutePath()); "heritrix_settings.xsd"); reader.setFeature("http://apache.org/xml/features/validation/schema",true); // add error handler which turns any errors into XML XMLErrorHandler errorHandler = new XMLErrorHandler(); reader.setErrorHandler( errorHandler ); // parse the document Document document = reader.read(anOrderFile); if (!errorHandler.getErrors().asXML().contentEquals("<errors/>")) { fail (anOrderFile.getAbsolutePath() + " is invalid according to schema: " + errorHandler.getErrors().asXML()); } // Find alle classes in the order.xml, and try to load/instantiate these classes // TODO Try to instantiate all classes in the given xml. iterateChildren(document.getRootElement()); } catch (SAXException e) { fail ("SaxException thrown" + e); } catch (DocumentException e1) { fail ("DocumentException thrown" + e1); } }